简单数组映射问题-JavaScript

时间:2018-12-19 04:21:46

标签: 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 个答案:

答案 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);