我的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; }
我的问题是,我显然缺少什么。还是该代码理论上不应该产生一个包含所有嵌套数组长度的新数组?
答案 0 :(得分: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的方法。似乎工作正常。 ,但很高兴从SO上任何经验丰富的JS开发人员那里了解这是否是一个好的方法。
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);