簡體   English   中英

循環未從數組中收集所有值

[英]Loop not gathering all values from array

我試圖創建2個循環,一個接一個地工作。 我基本上是想從數組中獲取所有成果。 我嘗試在for循環內執行for循環,但這僅使我從每個對象獲得第一個結果,而不是數組中的每個結果。

var customers = [{
            "Name" : "John",
            "Items" :[
                {"Fruits" : "Apple"},{"Fruits" : "Orange"}]
            },{
                "Name" : "Sam",
            "Items" :[
                {"Fruits" : "Pear"},{"Fruits" : "Nuts"}]
            },{
                "Name" : "Eric",
            "Items" :[
                {"Fruits" : "Banana"},{"Fruits" : "Raisins"}]
            }];
 for(i=0; i<=customers.length; i++){
 for(a=0; a<=customers.length; a++){
     alert(customers[i]["Items"][a]);
 }
}

您的第二個循環應該是items而不是customers

for(i=0; i < customers.length; i++) //notice that i < instead of i <=
{
   for(a=0; a < customers[i].Items.length; a++) //notice the change here
   {
     alert( customers[i].Items[a].Fruits ); // 
   }
}

更精確一點的是使用reduce

var allFruits = customers.reduce( ( a, b ) => a.concat( b.Items.map( s => s.Fruits ) ) , []);

您的第二個循環長度不正確。 嘗試這個:

    var customers = [{
                "Name" : "John",
                "Items" :[{"Fruits" : "Apple"},{"Fruits" : "Orange"}]
            },{
                "Name" : "Sam",
                "Items" :[{"Fruits" : "Pear"},{"Fruits" : "Nuts"}]
            },{
                "Name" : "Eric",
                "Items" :[{"Fruits" : "Banana"},{"Fruits" : "Raisins"}]
            }];
 for(i=0; i<=customers.length; i++){
    for(a=0; a<=customers[i]["Items"].length; a++){
        alert(customers[i]["Items"][a]);
    }
}

這應該可以解決您的問題。

 var customers = [{ "Name" : "John", "Items" :[ {"Fruits" : "Apple"},{"Fruits" : "Orange"}] },{ "Name" : "Sam", "Items" :[ {"Fruits" : "Pear"},{"Fruits" : "Nuts"}] },{ "Name" : "Eric", "Items" :[ {"Fruits" : "Banana"},{"Fruits" : "Raisins"}] }]; for(i=0; i<customers.length; i++){ for(a=0; a<customers[i]["Items"].length; a++){ console.log(customers[i]["Items"][a]); } } 

只需將concat方法與map結合使用,然后reduce

let fruits = [].concat(...customers.map(a => a.Items.map(b=>b.Fruits)));

 var customers = [{ "Name" : "John", "Items" :[ {"Fruits" : "Apple"},{"Fruits" : "Orange"}] },{ "Name" : "Sam", "Items" :[ {"Fruits" : "Pear"},{"Fruits" : "Nuts"}] },{ "Name" : "Eric", "Items" :[ {"Fruits" : "Banana"},{"Fruits" : "Raisins"}] }]; let fruits = [].concat(...customers.map(a => a.Items.map(b=>b.Fruits))); console.log(fruits); 

如果要獲得所有unique成果,可以使用ES6 Set

 var customers = [{ "Name" : "John", "Items" :[ {"Fruits" : "Apple"},{"Fruits" : "Orange"}] },{ "Name" : "Sam", "Items" :[ {"Fruits" : "Pear"},{"Fruits" : "Nuts"}] },{ "Name" : "Eric", "Items" :[ {"Fruits" : "Banana"},{"Fruits" : "Raisins"}] }]; let fruits = [...new Set([].concat(...customers.map(a => a.Items.map(b=>b.Fruits))))]; console.log(fruits); 

暫無
暫無

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

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