我有以下包含數百個物件的陣列
const images = [
{
"name" : "sky",
"width" : "90",
"height" : "150",
"colours" : ["pink", "yellow", "red"],
"price": "64"
},
{
"name" : "old car",
"width" : "90",
"height" : "150",
"colours" : ["dark purple", "sand", "light green"],
"price": "35"
},
{
"name" : "landscape",
"width" : "90",
"height" : "150",
"colours" : ["dark blue", "violet"],
"price": "85"
},
{
"name" : "kitchen",
"width" : "90",
"height" : "150",
"colours" : ["red", "green"],
"price": "38"
},
...
]
我想創建一個只有 10 個物件和一些鍵/值對(名稱、顏色、價格)的新陣列。可以使用另一個數字陣列作為索引來提取這 10 個物件。
這是包含索引的陣列示例:
randomNum = [4,24,39,82,92,27,123,22,84,65]
新陣列 - 預期結果 - 應該與此類似
data = [
{
name: "landscape",
colour: ["dark blue", "violet"],
price: "85"
},
{
name: "kitchen",
colour: ["red", "green"],
price: "38"
},
...
]
我正在嘗試迭代
const finalList = []; //new array
let quizItem;
for (let i = 0; i < 10; i ) {
quizItem= images[randomNum[i]];
finalList.push({name: quizItem.name, colour: quizItem.colour, price: quizItem.price);
}
我收到一個錯誤說... undefined is not an object (evaluating 'quizItem.name')
如果相反,我只是使用quizList.push(quizItem); 它作業正常并創建一個只有 10 條記錄的新陣列,但所有物件的專案(鍵/值對)與原始陣列相同。
uj5u.com熱心網友回復:
您在這里面臨的問題是,當您訪問時,您獲得randomNum[i]的值randomNum[i]可能超出了images串列范圍。因此,您正在嘗試訪問不存在或根本不存在的內容undefined。作為解決方案,您可以安全地生成一個隨機串列,如下所示,然后使用它來列印您的專案。
const images = [
{
"name": "sky",
"width": "90",
"height": "150",
"colours": ["pink", "yellow", "red"],
"price": "64"
},
{
"name": "old car",
"width": "90",
"height": "150",
"colours": ["dark purple", "sand", "light green"],
"price": "35"
},
{
"name": "landscape",
"width": "90",
"height": "150",
"colours": ["dark blue", "violet"],
"price": "85"
},
{
"name": "kitchen",
"width": "90",
"height": "150",
"colours": ["red", "green"],
"price": "38"
}
];
generateRandomNumbersList = (size, maxValue) => {
let randomNums = [];
let currentNum;
while (randomNums.length < size) {
currentNum = Math.floor(Math.random() * maxValue);
if (currentNum < maxValue) {
randomNums.push(currentNum);
}
}
return randomNums;
}
let randomNums = generateRandomNumbersList(10, images.length);
const finalList = []; //new array
let quizItem;
for (let count = 0; count < 10; count ) {
quizItem = images[randomNums[count]];
finalList.push({ name: quizItem.name, colour: quizItem.colours, price: quizItem.price });
}
console.log(finalList);
uj5u.com熱心網友回復:
您的代碼應該可以在注釋中指出的更正后正常作業。此外,您colour在物件中沒有屬性;但你有colours;也糾正一下。您還可以.map()按如下方式使用:
const finalList = randomNum.map(n => images[n])
.map(({name, colours, price}) => ({name, colours, price});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/365844.html
