function largestOfFour(arr) {
var lista = [];
var max = 0;
for (var x = 0; x < arr.length; x++) {
for (var y = 0; y < arr[x].length; y++){
if (arr[x][y] > max) {
max = arr[x][y];
}
lista[x] = max;
}
}
return lista;
}
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
^ 生成以下数组:[27,27,39,1001],但答案是:[27,5,39,1001]
我的函数正确显示每个子数组中的最大数量,除了第二个子数组。我不明白我的代码的哪一部分是错误的。
最佳答案
您从未重置max
变量。您需要在外部 for
循环的每次迭代中重置它。 (如果带有 1001
的子数组是第一个子数组,则结果将是 [1001, 1001, 1001, 1001]
。)
function largestOfFour(arr) {
var lista = [];
var max;
for (var x = 0; x < arr.length; x++) {
max = 0; // <-- add this line
for (var y = 0; y < arr[x].length; y++){
if (arr[x][y] > max) {
max = arr[x][y];
}
lista[x] = max;
}
}
return lista;
}
console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
顺便说一下,如果你这样做,你可以用更少的代码行来实现同样的事情:
function largestOfFour(arr) {
return arr.map(function(a) {
return Math.max.apply(Math,a);
});
}
console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
或者使用箭头函数甚至更短:
var largestOfFour = arr => arr.map(a => Math.max.apply(Math,a));
console.log(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
关于javascript - 我的 Javascript for 循环适用于除一个子数组以外的所有子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39059962/