Javascript Object Array цикл не пересекается - PullRequest
0 голосов
/ 03 января 2019

У меня проблема с циклом for.В чем проблема, у меня есть for, который проходит через объект, и он проходит через массив только один раз.Как я могу пройти через весь цикл массива объектов?Текущий код ниже:

var i = 0;
for (var key in data) {
  console.log(data[key].allProducts[i]);
  i++;
}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Ну, так как вы используете индексы здесь, почему бы не использовать вместо этого цикл for...of?Тогда вам не нужно обращаться к самим свойствам

В зависимости от вашего data объекта, вам может понадобиться использовать Object.values( data ) или придерживаться предыдущего for...in цикл, но я думаю, что принцип ясен:)

const data = {
 group1: {
  allProducts: [
    { id: 1, name: 'product 1' },
    { id: 2, name: 'product 2' },
    { id: 3, name: 'product 3' },
    { id: 4, name: 'product 4' }
  ]
 },
 group2: {
  allProducts: [
    { id: 5, name: 'product 5' }
  ]
 }
};

for (let item of Object.values( data) ) {
  for (let product of item.allProducts) {
    console.log(product);
  }
}
0 голосов
/ 03 января 2019

У вас есть только один цикл, пытающийся управлять двумя переменными, а это не то, что вы пытаетесь сделать.Предполагая, что ключи данных похожи на ['a', 'b', 'c'], вы на самом деле получаете данные ['a'] [1], данные ['b'] [2], данные ['c'] [3].

Вам нужны две вложенные петли:

for (var key in data) {
    var productsLength = data[key].allProducts.length;
    for (var i = 0; i < productsLength; i++) {
        console.log(data[key].allProducts[i]);
    }
}
...