Javascript.RU

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

Слияние вложенных массивов в 1 массив
Приветствую всех! Есть одна задача имеется массив x =[[1,2,3],[[4],[5,[6,7],[8,9]],10]] нужно написать ф-цию которая вернёт y=[1,2,3,4,5,6,7,8,9,10] . Вот мой код
var x =[[1,2,3],[[4],[5,[6,7],[8,9]],10]], y = [];
function arrMergeRecursive(arr) {
	for (item in arr) {
		if (typeof(item) === "number") {
			y.push(item); 
		}
		else if (typeof(item) === "object") 
			arrMergeRecursive(arr.findIndex(item));
	}
	return console.log(y);
}
arrMergeRecursive(x)

Решил эту же задачку на Python-е а на JavaScript не как не могу
Подозреваю что в рекурсивной ф-ции неправильно ссылаю на вложеный элемент и в итоге не получаю typeof(item) === "number" . Искал помощи в решении везде в т.ч. на StackOverflow. Буду рад если просто натолкнёте меня на решение. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 06.06.2017, 22:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Patron,
var x =[[1,2,3],[[4],[5,[6,7],[8,9]],10]];
function arrMergeRecursive(arr) {
    var temp = [];
    for (var i=0; i<arr.length; i++)  {
        var item = arr[i];
        typeof(item) === "object" ? temp = temp.concat(arrMergeRecursive(item)) : temp.push(item)
    }
  return temp;
}
alert(JSON.stringify(arrMergeRecursive(x)));
Ответить с цитированием
  #3 (permalink)  
Старый 06.06.2017, 22:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

x.toString().split(',')
Ответить с цитированием
  #4 (permalink)  
Старый 06.06.2017, 22:13
Интересующийся
Отправить личное сообщение для Patron Посмотреть профиль Найти все сообщения от Patron
 
Регистрация: 06.06.2017
Сообщений: 17

Хммм, я и не предполагал возможности таких решений, огромное спасибо всем! Я хотел поэлементно собирать массив y.

Последний раз редактировалось Patron, 06.06.2017 в 22:18.
Ответить с цитированием
  #5 (permalink)  
Старый 06.06.2017, 22:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Patron,
ну если строковое представление, затем разбить, то элементами массива будут не числа, подойдет ли такое, если нет, нужно преобразование.
Ответить с цитированием
  #6 (permalink)  
Старый 06.06.2017, 22:18
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

merge?
Ответить с цитированием
  #7 (permalink)  
Старый 06.06.2017, 22:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Paguo-86PK,
Ответить с цитированием
  #8 (permalink)  
Старый 06.06.2017, 22:27
Интересующийся
Отправить личное сообщение для Patron Посмотреть профиль Найти все сообщения от Patron
 
Регистрация: 06.06.2017
Сообщений: 17

laimas,
Я понял т.е. получается не тру массив намберов а строка. Но её легко сделать массивом намберов. В принципе, да пойдёт вполне адекваткное решение имхо.
Ответить с цитированием
  #9 (permalink)  
Старый 06.06.2017, 22:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Patron
т.е. получается не тру массив намберов а строка
нет, это будет массив строковых представлений чисел исходного массива. Если сразу с преобразованием, то так:

var x =[[1,2,3],[[4],[5,[6,7],[8,9]],10]],
    y = x.toString().split(',').map(function(v) {
        return +v
    });
console.log(y)
Ответить с цитированием
  #10 (permalink)  
Старый 06.06.2017, 22:37
Интересующийся
Отправить личное сообщение для Patron Посмотреть профиль Найти все сообщения от Patron
 
Регистрация: 06.06.2017
Сообщений: 17

laimas,
А можно узнать что значит массив строковых представлений? Что это за строковые представления? Я запустил код без JSON и sringify() на выходе прировнял вызов функции y-ку проверил тип второго элемента y[1] - получил в ответ "number".
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание из 2 массивов массив объектов RoyalHunt Общие вопросы Javascript 1 18.01.2017 11:26
Создание из 2 массивов массив объектов RoyalHunt Общие вопросы Javascript 7 17.01.2017 17:15
Добавление объекта в массив в цикле Dark19 Элементы интерфейса 3 11.12.2016 23:11
Чтение данных из файла в массив TheSingleElk Общие вопросы Javascript 2 16.06.2016 01:09
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14