Слияние вложенных массивов в 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" . Искал помощи в решении везде :help: в т.ч. на StackOverflow. Буду рад если просто натолкнёте меня на решение. Спасибо. |
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)));
|
x.toString().split(',')
|
Хммм, я и не предполагал возможности таких решений, огромное спасибо всем! Я хотел поэлементно собирать массив y.
|
Patron,
ну если строковое представление, затем разбить, то элементами массива будут не числа, подойдет ли такое, если нет, нужно преобразование. |
|
Paguo-86PK,
:blink: |
laimas,
Я понял т.е. получается не тру массив намберов а строка. Но её легко сделать массивом намберов. В принципе, да пойдёт вполне адекваткное решение имхо. |
Цитата:
var x =[[1,2,3],[[4],[5,[6,7],[8,9]],10]],
y = x.toString().split(',').map(function(v) {
return +v
});
console.log(y)
|
laimas,
А можно узнать что значит массив строковых представлений? Что это за строковые представления? Я запустил код без JSON и sringify() на выходе прировнял вызов функции y-ку проверил тип второго элемента y[1] - получил в ответ "number". |
| Часовой пояс GMT +3, время: 21:23. |