使用Math.max创建一个使用传递给函数的最长数组长度的数组?

时间:2016-07-08 21:50:22

标签: javascript arrays ecmascript-6

我正在尝试构建一个新数组,其长度等于传递给函数的最长数组。可以将无数个数组传递给函数,这就是我尝试使用Math.max的原因。

我使用了循环......:

function sumInternalValues() {
  let arrays = Array.from(arguments);
  let longest = 0;

  arrays.forEach(arr => {
    longest = (arr.length > longest) ? arr.length : longest;
  })

  let newArr = new Array(longest);
  //... do other things but for sake of this question, return here now
  return newArr.length;
}

let arr1 = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8, 9, 10];

console.log(sumInternalValues(arr1, arr2));

但是我怎样才能让Math.max工作呢?

function sumInternalValues() {
    let newArr = new Array(Math.max.apply(Math, arguments.length?));
}

注意:我将根据guidelines here回答我自己的问题。我花了相当多的时间试图解决这个问题,并没有找到太多的支持。

2 个答案:

答案 0 :(得分:1)

您可以使用array.from()将参数捕获为数组,然后映射生成的数组以获得长度。然后apply该数组到Math.max函数:



function sumInternalValues() {
  let args = Array.from(arguments);
  let newArr = new Array(Math.max.apply(Math, args.map(a => a.length)));
  // ... do some other things, but for the sake of this question, return here
  return newArr.length
}

let arr1 = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8, 9, 10];

console.log(sumInternalValues(arr1, arr2));




答案 1 :(得分:0)

密集阵列:

let denseArr = Object.assign([], arr1, arr2).fill(undefined);

稀疏数组:

let sparseArr = [];
sparseArr.length = Math.max(...[arr1, arr2].map(arr => arr.length));