[英]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.