簡體   English   中英

循環遍歷對象數組以創建列表數組

[英]Looping through an array of objects to create a list array

我無法從對象數組創建列表數組。 我不確定我哪里出錯了。 這是我的問題:

查找所有設計師的所有鞋子,並使用以下格式將它們列在 arrays 數組中:

[[設計師姓名,鞋名,價格],[設計師姓名,鞋名,價格],....] 例如,

 const currentInventory = [ { name: 'Brunello Cucinelli', shoes: [ {name: 'tasselled black low-top lace-up', price: 1000}, {name: 'tasselled green low-top lace-up', price: 1100}, {name: 'plain beige suede moccasin', price: 950}, {name: 'plain olive suede moccasin', price: 1050} ] }, { name: 'Gucci', shoes: [ {name: 'red leather laced sneakers', price: 800}, {name: 'black leather laced sneakers', price: 900} ] } ]; function renderInventory(inventory) { let arr = []; for(let i = 0; i < inventory.length; i++) { for(let j = 0;j < inventory[i].shoes.length; j++) { arr.push([`${inventory[i].name}, ${inventory[i].shoes[j].name}, ${inventory[i].shoes[j].price}`]) } } return arr; }

我收到此錯誤,但不知道為什么?

Expected $[0].length = 1 to equal 3. Expected $[0][0] = 'Brunello Cucinelli, tasselled black low-top lace-up, 1000' to equal 'Brunello Cucinelli'. Expected $[0][1] = undefined to equal 'tasselled black low-top lace-up'. Expected $[0][2] = undefined to equal 1000. Expected $[1].length = 1 to equal 3. Expected $[1][0] = 'Brunello Cucinelli, tasselled green low-top lace-up, 1100' to equal 'Brunello Cucinelli'. Expected $[1][1] = undefined to equal 'tasselled green low-top lace-up'. Expected $[1][2] = undefined to equal 1100. Expected $[2].length = 1 to equal 3. Expected $[2][0] = 'Brunello Cucinelli, plain beige suede moccasin, 950' to equal 'Brunello Cucinelli'. Expected $[2][1] = undefined to equal 'plain beige suede moccasin'. Expected $[2][2] = undefined to equal 950. Expected $[3].length = 1 to equal 3. Expected $[3][0] = 'Brunello Cucinelli, plain olive suede moccasin, 1050' to equal 'Brunello Cucinelli'. Expected $[3][1] = undefined to equal 'plain olive suede moccasin'. Expected $[3][2] = undefined to equal 1050. Expected $[4].length = 1 to equal 3. Expected $[4][0] = 'Gucci, red leather laced sneakers, 800' to equal 'Gucci'. Expected $[4][1] = undefined to equal 'red leather laced sneakers'. Expected $[4][2] = undefined to equal 800. Expected $[5].length = 1 to equal 3. Expected $[5][0] = 'Gucci, black leather laced sneakers, 900' to equal 'Gucci'. Expected $[5][1] = undefined to equal 'black leather laced sneakers'. Expected $[5][2] = undefined to equal 900.

還,

我認為我也可以使用 .map() 和 .reduce() 來解決這個問題,但我不知道從哪里開始。

您需要檢查長度

for(let j = 0; j < inventory[i].shoes.length; j++) {
               ^^^^

 const currentInventory = [ { name: 'Brunello Cucinelli', shoes: [ {name: 'tasselled black low-top lace-up', price: 1000}, {name: 'tasselled green low-top lace-up', price: 1100}, {name: 'plain beige suede moccasin', price: 950}, {name: 'plain olive suede moccasin', price: 1050} ] }, { name: 'Gucci', shoes: [ {name: 'red leather laced sneakers', price: 800}, {name: 'black leather laced sneakers', price: 900} ] } ]; function renderInventory(inventory) { let arr = []; for(let i = 0; i < inventory.length; i++) { for(let j = 0; j < inventory[i].shoes.length; j++) { arr.push([`${inventory[i].name}, ${inventory[i].shoes[j].name}, ${inventory[i].shoes[j].price}`]) } } return arr; } console.log(renderInventory(currentInventory));

更簡單的方法是通過直接獲取對象來使用for... of語句

 function renderInventory(inventory) { let arr = []; for (const { name, shoes } of inventory) for (const shoe of shoes) arr.push([`${name}, ${shoe.name}, ${shoe.price}`]); return arr; } const currentInventory = [{ name: 'Brunello Cucinelli', shoes: [{ name: 'tasselled black low-top lace-up', price: 1000 }, { name: 'tasselled green low-top lace-up', price: 1100 }, { name: 'plain beige suede moccasin', price: 950 }, { name: 'plain olive suede moccasin', price: 1050 }] }, { name: 'Gucci', shoes: [{ name: 'red leather laced sneakers', price: 800 }, { name: 'black leather laced sneakers', price: 900 }] }]; console.log(renderInventory(currentInventory));

在這一行中,您錯過了比較

for(let j = 0; inventory[i].shoes.length; j++) {

寫這個

   for(let j = 0;j < inventory[i].shoes.length; j++) {

 const currentInventory = [ { name: 'Brunello Cucinelli', shoes: [ {name: 'tasselled black low-top lace-up', price: 1000}, {name: 'tasselled green low-top lace-up', price: 1100}, {name: 'plain beige suede moccasin', price: 950}, {name: 'plain olive suede moccasin', price: 1050} ] }, { name: 'Gucci', shoes: [ {name: 'red leather laced sneakers', price: 800}, {name: 'black leather laced sneakers', price: 900} ] } ]; function renderInventory(inventory) { let arr = []; for(let i = 0; i < inventory.length; i++) { for(let j = 0; j < inventory[i].shoes.length; j++) { arr.push([inventory[i].name, inventory[i].shoes[j].name, inventory[i].shoes[j].price]) } } return arr; } console.log(renderInventory(currentInventory));

你需要這樣寫:

for(let i = 0; i < inventory.length-1; i++) {
    // code here
}

錯誤的原因是長度屬性不一定表示數組中定義的值的數量。

let array = ['apple', 'banana'];

console.log(array.length);
// Expected result: 2

console.log(array[2]);
// Expected result: undefined

這就是最后一項未定義的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM