function largestOfFour(arr) {
var newArray = [];
for(var i =0; i <=arr.length-1; i++){
console.log(arr[i]);
newArray[i] = Math.max(arr[i]);
}
console.log(newArray);
// You can do this!
return newArray;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
所以即使我在NaN
函数中提供了一个参数,我也不明白为什么我会得math.max
。在for循环中的console.log中,我得到主数组中的每个数组都要显示。这意味着如果我在max函数中使用相同的arr[i]
,它应该给我该子数组的最大值。
答案 0 :(得分:3)
您正在将数组传递给Math.max
并期望它返回该数组中的最大值。
但是,Math.max
在其参数中返回最大值。所以使用
var newArray = [];
for(var i =0; i < arr.length; ++i)
newArray[i] = Math.max.apply(void 0, arr[i]);
在ES6中,您可以使用arrow functions和spread operator来简化:
arr.map(a => Math.max(...a));
答案 1 :(得分:2)
它不会那样工作。 Math.max
期望单独的数字。您可以使用apply
function largestOfFour(arr) {
return arr.map(function(subArr){
return Math.max.apply(Math, subArr);
});
}
答案 2 :(得分:0)
如果你想要最终的最大值,请执行此操作。
var original = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
Math.max.apply(null, original.map(function(arr) { return Math.max.apply(null, arr); }));
或者如果你想要每个数组的最大值,只需要
original.map(function(arr) { return Math.max.apply(null, arr); });
答案 3 :(得分:0)
使用lodash
var x = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
_.flatten(x).max();
答案 4 :(得分:-1)
编辑: 为了向数组添加值,我建议使用push方法。如: NewArray.push(Math.max(...子[I]));或者newarray.push(math.max.apply(null,sub [i])。 另一种方法是,在声明数组时,它会占用大小: Var newArray = new Array(arr.length); 在javascript中有这个新的传播运算符(...)!