Многомерный массив. Упрощение
Добрый день! Помогите, пожалуйста, зашла в тупик)
Передо мной стояла задача Написать функцию, которая упрощает передаваемый ей массив избавляясь от вложенностей. Я попробовала решить так, но не работает:help: :help: :help: function flatten(input) { var c = []; for(var i = 0; i < input.length; i++) { if(typeof(input[i]) == 'object') { return flatten(input[i]); var b = flatten(input[i]); c.push(b); } else { c.push(input[i]);//добавить input[i] в с } } return c; } var a = [5, [2, 8, [35, 48, [24]], 15, [12, 85]], [[1, [34, [26]], [15]]]]; console.dir("Результат (ответ [5, 2, 8, 35, 48, 24, 15, 12, 85, 1, 34, 26, 15]): ", flatten(a)); |
function fn (arr) { var mas = []; for(var i = 0; i < arr.length; i++) { if(Array.isArray(arr[i])) mas = mas.concat(fn(arr[i])); else mas.push(arr[i]); } return mas; } var f = fn([5, [2, 8, [35, 48, [24]], 15, [12, 85]], [[1, [34, [26]], [15]]]]) alert(f) |
Спасибо! Уже так решила
function flatten(input) { var c = []; for(var i = 0; i < input.length; i++) { if(typeof(input[i]) == 'object') { var b = flatten(input[i]);//шаг 1 получить из input[i] одномерный массив for(var k = 0; k < b.length; k++) { //шаг 2 Добавить элементы из этого массива в с c.push(b[k]); } } else { c.push(input[i]);//добавить input[i] в с } } return c; } var a = [5, [2, 8, [35, 48, [24]], 15, [12, 85]], [[1, [34, [26]], [15]]]]; console.log("Результат (ответ [5, 2, 8, 35, 48, 24, 15, 12, 85, 1, 34, 26, 15]): ", flatten(a)); |
сравнения 'object' плохо ))))
на массив делай проверку Array.isArray([]) // true; |
:write:
var a = [5, [2, 8, [35, 48, [24]], 15, [12, 85]], [[1, [34, [26]], [15]]]]; alert(JSON.stringify(a)) a = a.join(' ').split(/\D+/) ; alert(JSON.stringify(a)) |
Часовой пояс GMT +3, время: 04:01. |