Выпуск простой карты массивов - JavaScript
У меня простая проблема с моей программой Javascript. Проблема в том, что когда я пытаюсь отобразить длины вложенных массивов, последний массив исключается.
// the length doesnt matter, its N number of arrays
var exampleArray = [ [nested array], ..., [nested array] ];
function findArrayLengths() {
var arrayLengths = exampleArray.map(function(x) {
return x.length; });
return arrayLengths; }
У меня вопрос, есть ли что-то очевидное, что я упускаю. Или этот код теоретически не должен создавать новый массив, который содержит длины всех вложенных массивов?
1 ответ
Вы можете сделать это так. Вам нужно выровнять массив рекурсивно.
Я рассматриваю вложенный массив, то есть вложенный массив может быть любой глубины.
var exampleArray = [ [1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]] ];
function findArrayLengths(input) {
return input.reduce((op,cur)=>{
return Array.isArray(cur) ? op.concat(findArrayLengths(cur)) : op.concat(cur)
},[])
}
let op = exampleArray.map(e=>{
return findArrayLengths(e).length
})
console.log(op);
Есть еще один способ сделать это с Array.prototype.flat. Вроде нормально работает. но будем рады узнать, если это хороший способ сделать это или нет от любого из опытных разработчиков JS здесь на SO.
var arr = [ [1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]], [[1,2,3,4], [1,2,[1,2,3]], [1,2,3,4,5,[1,2,3,4,[1,2,3,4]]]] ];
let op = arr.map(e=> e.flat(Infinity).length);