我正在尝试构建一个新数组,其长度等于传递给函数的最长数组。可以将无数个数组传递给函数,这就是我尝试使用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回答我自己的问题。我花了相当多的时间试图解决这个问题,并没有找到太多的支持。
答案 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));