使用sort从子数组返回最大数字的数组

时间:2017-06-24 01:29:36

标签: javascript arrays sorting

我是一名通过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]]);

3 个答案:

答案 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))

})