2017-12-12 14 views
0

서로 후 하나씩 작동하는 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]); 
} 
} 

답변

2

은 조금 더 정확한 하나 reduce

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

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]); } }

이 또한 있어야'난 < '와'은 < '보다는'I <= '와'은 <= ' – George

+1

@George 덕분에 동일한 수정. – gurvinder372

+0

도와 주셔서 감사합니다. – wertyj

1

두 번째 루프를 사용하는 것입니다 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); // 
    } 
} 

이어야에 대한 루프 초 잘못된 길이가 귀하의 . 이 시도 :

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]); 
    } 
} 
0

그냥 쉽게 솔루션을 mapreduce와 조합 concat 방법을 사용합니다.

모든 unique 과일을 얻고 싶은 경우에

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);
let fruits = [].concat(...customers.map(a => a.Items.map(b=>b.Fruits))); 

, 당신은 ES6에서 Set를 사용할 수 있습니다.

+0

ES6을 사용하고 있으므로'[] .concat (... customers.map (...))' – Rajesh

+0

@ Rajesh, 고맙습니다! –

1

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);

이 문제를 해결해야한다.