JS Перебор ассоциативного многомерного массива
Подскажите пож есть ли возможность перебрать многомерный ассоциативный массив внутри функции JS. Массив уже находится внутри функции. Может у кого примерчик есть? В массиве 4 уровня вложености masiv['lev1']['lev2']['lev3']['lev4']. Прочитал что для ассоциативных массивов существует структура JS for in , только с помощью нее у меня получилось вывести первый уровень массива. И то написало не список значений во втором уровне, а просто "OBJECT". Выглядел скрипт вот так:
for (var Name in my_array) { // Переменной Name на каждой итерации присваивается // строка-индекс ассоциативного массива document.write(Name + " = " + my_array[Name] + "<br>"); } Подскажите пож как сделать что-то подобное перебрать массив и заодно выполнить действия при переборе. Ну с действиями более или менее понятно а со структурой перебора многомерного ассоциативного массива в JS помогите пож . |
<script> function recur( my_array ){ if ( my_array && typeof my_array === "object" && Object.prototype.toString.call( my_array ) === "[object Object]" ) { for (var Name in my_array) { document.write(Name + " = " + recur( my_array[Name] ) + "<br>"); } } else { return my_array; } } recur({ "lev1": { "lev2": { "lev3": { "lev4": "test" } } }, "alev1": { "alev2": { "alev3": { "alev4": null } } } }); </script> |
Цитата:
Многомерные массивы можно перебирать либо напрямую (вложенные циклы, не рекомендуется), либо итеративно, либо рекурсивно. Тебе больше подойдет последний вариант, ибо он проще: function iterator (array, callback) { var item, index = 0, length = array.length; for (; index < length; index++) { item = array[index]; if (Object.prototype.toString.call(item) === '[object Array]') { iterator(item, callback); } else { callback(item); } } } // Будет вызвана для каждого элемента, не являющимся массивом. function callback (item) { console.log(item); } var array = [[[1.1], [1.2], [1.3], [1.4]], [[2.1], [2.2], [2.3], [2.4]], [[3.1], [3.2], [3.3], [3.4]]]; iterator(array, callback); Остальное сам под себя допишешь. |
Если известно, что мужно перебрать объект до 4 уровня вложенности, то можно использовать 4 вложенных цикла for ... in.
//для теста var masiv=[[[[0, 1], [2, 3]], [[4, 5], [6, 7]]], [[[8, 9], [10, 11]], [[12, 13], [14, 15]]]]; for (var i in masiv) for (var j in masiv[i]) for (var k in masiv[i][j]) for (var l in masiv[i][j][k]) // действия с masiv[i][j][k][l], для теста: alert(masiv[i][j][k][l]); Ред. Извините, пока писал, уже опоздал :) Хотя, здесь ещё никто не привёл пример перебора напрямую. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Итеративный способ сделает это быстрее рекурсии. Цитата:
|
Часовой пояс GMT +3, время: 12:43. |