我正在进行一项编码挑战,即采用由子数组组成的给定数组,在每个子数组中搜索最大的数字,最后返回一个仅由最大数字组成的新数组。我的想法是从每个子数组中创建变量,编写一个 for 循环来比较数组中的每个值,然后将最大值插入一个新数组。在编写了我的第一个 for 循环之后,我测试了我的代码,发现我得到了一个意想不到的结果,即整个第一个子数组被插入了我的新数组。在编写接下来的三个循环之前,我正在寻找错误。谢谢。编辑:这是针对初学者 JavaScript 编码人员的,建议指出在您的解决方案中使用比较运算符。
function largestOfFour(arr) {
var one = arr[0];
var two = arr[1];
var three = arr[2];
var four = arr[3];
var newArr = [];
for (var i = 0; i < one.length; i++){
var oneLrg = 0;
if (one[i] > oneLrg){
oneLrg = one[i];
}
newArr.push(oneLrg);
}
return arr;
}
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])); //This test case returns [4,5,1,3] instead of just [5]
最佳答案
使用 >
:
var newArr = [];
for(var i=0; i<arr.length; ++i) { // Iterate array
var maximum = -Infinity; // Initial maximum
for(var j=0; j<arr[i].length; ++j) // Iterate subarrays
if(arr[i][j] > maximum) // Compare
maximum = arr[i][j]; // Update maximum
newArr.push(maximum); // Store the real maximum
}
使用 Math.max
:
var newArr = [];
for(var i=0; i<arr.length; ++i) { // Iterate array
var maximum = -Infinity; // Initial maximum
for(var j=0; j<arr[i].length; ++j) // Iterate subarrays
maximum = Math.max(maximum, arr[i][j]); // Update maximum
newArr.push(maximum); // Store the real maximum
}
添加apply
:
var newArr = [];
for(var i=0; i<arr.length; ++i) // Iterate array
newArr.push( // Store ...
Math.max.apply(Math, arr[i]) // ... the maximum of the subarray
);
添加 ECMAScript 5 map ,
var newArr = arr.map(function(subarray) {
return Math.max.apply(Math, subarray);
});
添加 ECMAScript 5 bind ,
var newArr = arr.map(Function.apply.bind(Math.max, Math));
或添加 ECMAScript 6 arrow functions和 spread operator ,
var newArr = arr.map(subarray => Math.max(...subarray));
关于javascript - 在由子数组组成的数组中搜索最大数并在新数组中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094820/