我正在尝试查找多维数组的最大值。
输入:
[[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]
结果:
[5, 27, 39, 1001]
我尝试了什么:
var largestArr = [];
function largestOfFour(arr) {
for (var i = 0; i < arr.length; i++) {
var largest = 0;
var currentArr = arr[i];
var stop = currentArr.length;
for (var j = 0; j < stop; j++) {
if (currentArr[0] > largest) {
largest = currentArr[0];
largestArr.push(largest);
largestArr.shift();
}
}
return largestArr;
}
}
largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]);
任何人都可以帮助我理解为什么这不起作用吗?
答案 0 :(得分:1)
问题出在这里
if (currentArr[0]>largest){
largest = currentArr[0];
//
}
这应该如下所示:
if (currentArr[j]>largest){
largest = currentArr[j];
//
}
为什么这是错的?
这是错误的,因为你总是将每个数组的第一项与largest
进行比较,而不是逐个比较每个数组中的所有项目。
此外,您还需要进行一些更正。
Specifficaly,没有必要使用shift
方法。您只需在largestArr
中的每个处理结束后推送每个数组的最大值。最后,但并非最不重要的是,您必须将largestArr
的return语句移出for循环。
var largestArr = [];
function largestOfFour(arr) {
for (var i=0; i<arr.length; i++) {
var largest = 0;
var currentArr = arr[i];
var stop = currentArr.length;
for (var j=0; j<stop; j++){
if (currentArr[j]>largest){
largest = currentArr[j];
}
}
largestArr.push(largest);
}
return largestArr;
}
alert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
&#13;
答案 1 :(得分:0)
由于此处提供了答案,因此某些代码可以在较少的行中执行相同的工作,以后您可能会发现使用reduce
有用。
var out = arr.reduce(function (p, c) {
return p.concat(Math.max.apply(null, c));
}, []);
答案 2 :(得分:0)
的Christos&#39;答案是正确的,应该选择作为答案。
此外,您不应该通过在函数外部声明largestArray
来污染全局命名空间,因为无论如何您都要返回所述数组。
function largestOfFour(arr) {
var largestArr = []; // put this line here instead of making it global
for (var i=0; i<arr.length; i++) {
var largest = 0;
var currentArr = arr[i];
var stop = currentArr.length;
for (var j=0; j<stop; j++){
if (currentArr[j]>largest){
largest = currentArr[0];
}
}
largestArr.push(largest);
}
return largestArr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);