我试图找到四个子阵列中每个子阵列中的最大数量,将每个max推送到包含所有四个maxes的新数组并返回该数组。当我运行此代码时,它返回一个包含四个值的数组,但它们都是null。我究竟做错了什么?
largest = [];
function largestOfFour(arr) {
for (i = 0; arr.length > i; i++) {
var tempSub = arr.slice(i , i + 1);
largest.push(Math.max.apply(Math, tempSub));
}
return largest;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
答案 0 :(得分:3)
您可以使用Array.map
在每个获取其最大值的数组上运行函数:
function largestOfFour(arr) {
return arr.map(function(v){
return Math.max.apply(Math, v);
});
}
或使用ES6 arrow functions(实际上支持的浏览器不多):
function largestOfFour(arr) {
return arr.map(v => Math.max.apply(Math, v));
}
答案 1 :(得分:3)
当您使用slice
获取数组的一部分时,您将获得一个包含其中项目的数组。变量tempSub
不包含像[4, 5, 1, 3]
这样的值数组,它包含一组值数组,如[[4, 5, 1, 3]]
。当您将其发送到max
方法时,它将无法获得最大值,因为您没有将值发送到方法中,而是发送一个数组值。
使用arr[i]
获取数组中的项而不是slice
。
此外,您应该在函数内部声明变量largest
,以便可以多次使用该函数而不保留先前调用的结果。变量i
也应该是本地的。
function largestOfFour(arr) {
var largest = [];
for (var i = 0; i < arr.length; i++) {
largest.push(Math.max.apply(Math, arr[i]));
}
return largest;
}
var result = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
// show result in snippet
document.write(JSON.stringify(result));