Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Многомерный массив. Упрощение (https://javascript.ru/forum/misc/53315-mnogomernyjj-massiv-uproshhenie.html)

Julia_bee 29.01.2015 13:31

Многомерный массив. Упрощение
 
Добрый день! Помогите, пожалуйста, зашла в тупик)

Передо мной стояла задача

Написать функцию, которая упрощает передаваемый ей массив избавляясь от вложенностей.

Я попробовала решить так, но не работает: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));

caetus 29.01.2015 14:26

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)

Julia_bee 29.01.2015 14:31

Спасибо! Уже так решила

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));

caetus 29.01.2015 14:33

сравнения 'object' плохо ))))
на массив делай проверку Array.isArray([]) // true;

рони 29.01.2015 17:22

: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.