有人可以告诉我这段代码有什么问题吗?我试图从四个独立的数组中返回最大的数字。
function largestOfFour(arr) {
var longList = [];
for (var i in arr){
var longest = 0;
for (var x=0; x<i.length; x++){
if (i[x] > longest){
longest=i[x];
}
longList.push(longest);
}
}
return longList;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
编辑:Lye Fish提供了以下答案。这是新代码:
function largestOfFour(arr) {
return arr.map(Function.apply.bind(Math.max, Math));
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:3)
for(var i in arr)
提供指数,因此i[x]
最终为0[0]
而不是arr[0][0]
。
使用for (var index=0; index<arr.length; index++) { i = array[index]; ... }
或(除非您支持古人)Array.each
,以迭代数组项目(或者更好,Array.reduce
):
var arrayMax = function(arr) {
return arr.reduce(function(a, e) { return Math.max(a, e); });
}
arrayMax(arr.map(arrayMax));
// ==> 1001
或者,更好的是:
var arrayMax = function(arr) {
return Math.max.apply(Math, arr);
}
arrayMax(arr.map(arrayMax));
// ==> 1001
编辑:可能是我太快读了这个问题;如果你想单独列出每个子列表的最大值,Lye Fish会在评论中提供它。
答案 1 :(得分:0)
// sort function
var op = function(a, b) { return a < b};
// the input
arr2d = [[8,7,1,78,899],[8,7,1,78,198],[8,7,1,78,598],[8,7,1,78,398]];
// output
var result = [];
// process
arr2d.forEach(function(arr) {
result.push(arr.sort(op)[0]); // sort and return the highest of the numbers
});