2016-11-01 4 views
-1

Я сделал ajax и вернул многомерный массив, который находится на уровне 5 уровней, и на каждом уровне есть много предметов. Я хочу пройти через каждый уровень и создать синтаксис HTML. После завершения всего 5-го уровня. Я присоединяюсь ко всему синтаксису и добавляю весь список в HTML.jquery, как перебрать сложный массив

прямо сейчас меня беспокоит, как его закодировать.

структура массива как ниже

var array = [object, object, object, object] 
      |0 object level 1 
       |1 object level 2 
       |0 object level 3 
        |0 object level 4 
        |0 object level 5 
      |1 object 
      |2 object 
      |3 object 

здесь является упрощенной выборкой данных

var test = [ 
    { 
     "someid":"25", 
     "level1":[ 
      { 
       "name":"john doe", 
      } 
      "level2": [ 
      { 
       "order_quantity":"1", 
       "order_price":"12.00", 
       "level3":[ 
       { 
        "addon_price":"2.00" 
       }] 
      }] 
     }] 
    } 
] 

Я пытаюсь использовать JavaScript для цикла, но после 2-го уровня он становится очень некрасиво и трудно отследить.

первого уровня петли петли петли

for(i=0; i<array.length;i++) 

второй уровень

for(n=0; n<array[i].level1.length;n++) 

Третий уровень

for(y=0;y<array[i].level2[n].level3.length;y++) 

Я не думаю, что это правильный путь.

Что бы правильно перебрать массив как этот

У меня также есть JQuery. но не уверен, как использовать $ .each для этого.

поэтому решение jquery приветствуется.

+0

пожалуйста, добавьте образец вашего массива. –

+3

Если вам нужно ударить каждый элемент, то 5-мерный массив, вероятно, будет неприятным, независимо от того, как вы его используете. – DBS

+1

Сделайте шаг назад - есть ли способ получить меньше вложенных структур данных? Возможно ли быть более конкретным в вашем запросе ajax для возврата более плоских данных? –

ответ

3

Вы можете использовать рекурсивный подход.

var array = [[[1, 2, 3, 4], [[5, 6]]], [7, 8], [9, 10], [11, 12]]; 
 

 
array.forEach(function iter(a) { 
 
    if (Array.isArray(a)) { 
 
     a.forEach(iter); 
 
     return; 
 
    } 
 
    console.log(a); 
 
});

или использовать жестко закодированный Раствор

var test = [{ someid: "25", level1: [{ name: "john doe", level2: [{ order_quantity: "1", order_price: "12.00", level3: [{ addon_price: "2.00" }] }] }] }]; 
 

 
test.forEach(function (a) { 
 
    a.level1.forEach(function (b) { 
 
     b.level2.forEach(function (c) { 
 
      c.level3.forEach(function (d) { 
 
       console.log(d.addon_price); 
 
      }); 
 
     }); 
 
    }); 
 
});

Или использовать более динамичное решение, если подуровни следовать тому же правилу здания.

var test = [{ someid: "25", level1: [{ name: "john doe", level2: [{ order_quantity: "1", order_price: "12.00", level3: [{ addon_price: "2.00" }] }] }] }]; 
 

 
test.forEach(function iter(level) { 
 
    return function (a) { 
 
     if (Array.isArray(a['level' + level])) { 
 
      a['level' + level].forEach(iter(level + 1)); 
 
      return; 
 
     } 
 
     Object.keys(a).forEach(function (k) { 
 
      console.log(a[k]); 
 
     }); 
 
    } 
 
}(1));

+0

Будет ли это работать, если есть массив объектов против массива массивов? например OP выглядит так, будто у него есть массив объектов. Ваше решение похоже на массив массивов. – James

+0

Право, я спрашивал о некоторых данных op, чтобы решить проблему, но итеративный подход мог бы помочь. –

+0

@NinaScholz Я только что добавил данные образца уровня 3. Основная идея такова. Я думаю, что если я смогу сделать 3 уровня, я смогу получить хорошую идею. – codenoob

Смежные вопросы