Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.01.2015, 13:31
Новичок на форуме
Отправить личное сообщение для Julia_bee Посмотреть профиль Найти все сообщения от Julia_bee
 
Регистрация: 29.01.2015
Сообщений: 2

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

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

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

Я попробовала решить так, но не работает

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));
Ответить с цитированием
  #2 (permalink)  
Старый 29.01.2015, 14:26
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

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)

Последний раз редактировалось caetus, 29.01.2015 в 14:30.
Ответить с цитированием
  #3 (permalink)  
Старый 29.01.2015, 14:31
Новичок на форуме
Отправить личное сообщение для Julia_bee Посмотреть профиль Найти все сообщения от Julia_bee
 
Регистрация: 29.01.2015
Сообщений: 2

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

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));
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2015, 14:33
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

сравнения 'object' плохо ))))
на массив делай проверку Array.isArray([]) // true;
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2015, 17:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109


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))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многомерный массив sparrow Общие вопросы Javascript 4 16.01.2014 14:58
Многомерный массив javascript simple Общие вопросы Javascript 20 03.11.2010 02:11
ajax и многомерный массив cat9 AJAX и COMET 1 03.10.2010 15:25
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Многомерный массив в json Л_Денис Общие вопросы Javascript 1 21.04.2010 21:43