2015-07-02 4 views
0

У меня есть массив, похожий на этот, я хотел бы повторить каждый элемент, пока у них не будет свойства «sub». Как я могу сделать это с помощью javascript ??? Я не знаю, какое количество «под» у них есть.Рекурсивный массив Javascript

var items = [ 
    { title: 'a' }, 
    { title: 'b', sub: [ 
     { title: 'ba' }, 
     { title: 'bb' } 
    ] }, 
    { title: 'c', sub: [ 
     { title: 'ca', sub: [ 
      { title: 'caa' }, 
      { title: 'cba' } 
     ] } 
    ] } 
]; 
+0

так что вы хотите сделать sub пустым массивом или получить массив из под? что ты уже испробовал? – depperm

+0

Идите и сделайте что-нибудь с этими предметами? – dfsq

+0

Какой результат вы хотели бы получить из вышесказанного? Вы хотите, чтобы все подпозиции были сплющены в один одномерный массив из 8 объектов или вы просто хотите, чтобы все они были удалены (т. Е. Оставил только массив из «a», «b» и «c») ? –

ответ

2

Вы можете перебирать свой массив рекурсивно с чем-то вроде этого:

function iterateArray(array){ 
    array.forEach(function(item){ 
     var title = item.title; 
     console.log(title); 
     if(item.sub){ 
      iterateArray(item.sub); 
     } 
    }); 
} 

iterateArray (пункты); выход будет

а, б, ба, бб, с, ч, CAA, сЬа

+0

Возможно ли без jQuery ?? – Davide

+0

Это ванильный JavaScript, дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach – RPallas

0

Вообще лучшим способом цикла через массивы массивов с неизвестным уровнем вложенности и делать что-то по каждому элементу внутри всего объекта - это использование рекурсии.

function doThing(arr) { 
    if (typeof(arr) == "object") { 
     for (var i = 0; i < arr.length; i++) { 
      doThing(arr[i]); 
     } 
    } 
    else { 
    //Do your thing with this item! 
    } 
}