搜索由子阵列组成的数组,用于新数组中的最大数字和返回

Aus*_*sen 3 javascript arrays loops for-loop

我正在编写一个编码挑战来获取一个由子数组组成的给定数组,搜索每个子数组中最大的数字,最后返回一个只包含最大数字的新数组.我的思考过程是从每个子数组中创建变量,编写比较数组中每个值的for循环,然后将最大值推送到新数组.在编写了我的第一个for-loop之后,我测试了我的代码并看到我得到了一个意外的结果,即整个第一个子阵列被推入我的新数组中.在编写接下来的三个循环之前,我正在寻找错误.谢谢.编辑:这适用于初学者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]
Run Code Online (Sandbox Code Playgroud)

Ori*_*iol 12

使用>:

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
}
Run Code Online (Sandbox Code Playgroud)

使用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
}
Run Code Online (Sandbox Code Playgroud)

添加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
  );
Run Code Online (Sandbox Code Playgroud)

添加ECMAScript 5 地图,

var newArr = arr.map(function(subarray) {
  return Math.max.apply(Math, subarray);
});
Run Code Online (Sandbox Code Playgroud)

添加ECMAScript 5 绑定,

var newArr = arr.map(Function.apply.bind(Math.max, Math));
Run Code Online (Sandbox Code Playgroud)

或者添加ECMAScript 6 箭头函数扩展运算符,

var newArr = arr.map(subarray => Math.max(...subarray));
Run Code Online (Sandbox Code Playgroud)