我是一名通过FCC学习的初学者。我目前正在尝试解决算法挑战,其中我必须返回一个由每个子阵列中最大数字组成的数组。对我错过或做错不当的解释非常感谢,因为它目前只返回第一个数组的零索引。
到目前为止我的代码:
function largestOfFour(arr) {
var i = 0;
for (i = 0; i < arr.length; i++){
arr[i].sort(function(a, b){return b-a});
return arr[i][0];
}
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
答案 0 :(得分:1)
您将从循环的第一次迭代返回。 (return终止整个函数,因此循环无用)。您需要在循环结束后返回,因此您需要一种新的方式来存储结果(另一个数组)。
由于您正在寻找最大数量,Math.max
将优于sort
:
function largestOfFour(arr) {
var i = 0;
var results = []; // the results array (the array that will contain the maximum numbers)
for (i = 0; i < arr.length; i++) {
var max = Math.max.apply(null, arr[i]); // get the maximum number for the current array (if you want to use sort, it won't be a problem but Math.max is better)
results.push(max); // add this maxumum number to the results array
}
return results; // when the loop finishes (we got all the maximums), then return
}
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
答案 1 :(得分:1)
您可以在数组上使用map
函数,并为每个子数组取最大值:
arr.map(x => Math.max(...x))
# [ 5, 27, 39, 1001 ]
或者:
arr.map(x => Math.max.apply(null, x))
# [ 5, 27, 39, 1001 ]
答案 2 :(得分:-1)
function
没有在数组的整个长度上执行,因为它在第一次迭代后遇到return
语句。在这种情况下,目标是从每个子数组中找到最大的,所以必须在每个子阵列上触发找到最大值的函数
// find largest in each subarray.the largest will be at 0 index
function largestOfFour(arr) {
return arr.sort(function(a, b) {
return b - a
})[0];
}
var array = [
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]
// looping through the array
array.forEach(function(item) {
//item will be each subarray
console.log(largestOfFour(item))
})