Цикл через многоуровневый массив - PullRequest
0 голосов
/ 26 марта 2019

У меня есть массив с несколькими уровнями, каждый массив - это «день», и каждый день имеет разные события (catalogo). Catalogo - это массив с едой, которая будет подана в этот день.Проблема, с которой я сталкиваюсь, заключается в попытке показать данные в каталоге;

(4) [Array(7), Array(7), Array(7), Array(7)]
    0: Array(7)
      0: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      1: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      2: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      3: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      4: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      5: {fecha: 2019, id: 1553410800, mes: 3, catalogo: Array(1), …}
      6:
        fecha: 2019
        id: 1553410800
        mes: 3
        catalogo: Array(2)
          0: {id: "1553929200", tipo: "food",…}
          1: {id: "1553995800", tipo: "food" …} 
    1: (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
    2: (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
    3: (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]

Делая это, я могу зациклить дочерний массив, как я могу зациклить / получить доступ к данным в catalogo;

for ( var i = 0; i < data_array.length; i++ ) {
  var childArray = data_array[i];
  for( var j = 0; j < childArray.length; j++ ) { 
}

Я пробовал это, но не работает:

for ( var i = 0; i < data_array.length; i++ ) {
  var childArray = data_array[i];
  for( var j = 0; j < childArray.length; j++ ) { 
    var third_Array = childArray[j];
    for ( var k = 0; k < third_Array.length; k++) { 
      console.log(third_Array);
    }
  }
}

Ответы [ 5 ]

5 голосов
/ 26 марта 2019

Немного сложно протестировать без фактических данных, но попробуйте это:

const data = [Array(7), Array(7), Array(7), Array(7)]; // your data
data.forEach(day => {
    day.forEach(element => { 
        element.catalogo.forEach(c => { console.log(c); }))
    }
})
2 голосов
/ 26 марта 2019

Вы близки, но вам не хватает доступа к ключу catalogo.Это должно выглядеть так:

for ( var i = 0; i < data_array.length; i++ ) {
  var childArray = data_array[i];
  for( var j = 0; j < childArray.length; j++ ) { 
    var third_Array = childArray[j].catalogo; // <-- This is missing
    for ( var k = 0; k < third_Array.length; k++) { 
      console.log(third_Array[k]);
    }
  }
}
1 голос
/ 26 марта 2019

third_Array на самом деле не массив. Это объект, который содержит catalogo proeprty, который является массивом, поэтому вы должны перебрать third_Array.catalogo.

Как бы я написал это:

 for(const weekPlan of data_array) {
   for(const dayPlan of weekPlan) {
     for(const dish of dayPlan.catalogo) {
       console.log(dish);
       //...
     }
   }
}

Или, если вас интересует только самый низкий уровень:

 for(const dish of data_array.flat().flatMap(it => it.catalogo)) {
  //...
 }
0 голосов
/ 26 марта 2019

у вас, кажется, есть массив, вложенный в несколько массивов Вы можете решить свои проблемы, как это вот пример

let array = [
[0, 1, 2],
[1, 2, 3],
[2, 3, 4]
]
let arrayLength = array.length;
for (let i = 0; i < arrayLength; i++) {
 let items = array[i].length;
 console.log(i, items)
 for (let n = 0; n < items; n++) {
  console.log(array[i][n]);
 }
}
0 голосов
/ 26 марта 2019

В зависимости от вашей структуры данных вам нужно выполнить итерацию по внешнему массиву, затем выполнить итерацию по каждому элементу внутренних массивов и, наконец, получить доступ к свойству catalogo каждого внутреннего массива и выполнить итерацию по нему.

Я бы также упростил вам синтаксис, используя встроенный Array.prototype.forEach().

const data = [
  [
    {
      catalogo: [
        { foo: 'bar00' },
        { foo: 'bar01' }
      ]
    },
    {
      catalogo: [
        { foo: 'bar02' },
        { foo: 'bar03' }
      ]
    }
  ],
  [
    {
      catalogo: [
        { foo: 'bar04' },
        { foo: 'bar05' }
      ]
    },
    {
      catalogo: [
        { foo: 'bar06' },
        { foo: 'bar07' }
      ]
    }
  ],
  [
    {
      catalogo: [
        { foo: 'bar08' },
        { foo: 'bar09' }
      ]
    },
    {
      catalogo: [
        { foo: 'bar10' },
        { foo: 'bar11' }
      ]
    }
  ]
];

data.forEach(
  (innerArray) => innerArray.forEach(
    (element) => element.catalogo.forEach(
      (item) => console.log(item.foo)
    )
  )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...