javascript - 在由子数组组成的数组中搜索最大数并在新数组中返回

标签 javascript arrays loops for-loop

我正在进行一项编码挑战,即采用由子数组组成的给定数组,在每个子数组中搜索最大的数字,最后返回一个仅由最大数字组成的新数组。我的想法是从每个子数组中创建变量,编写一个 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 functionsspread operator ,

var newArr = arr.map(subarray => Math.max(...subarray));

关于javascript - 在由子数组组成的数组中搜索最大数并在新数组中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094820/

相关文章:

javascript - 如何阻止类在函数中可点击

javascript - 同位素容器 div 上的滚动条

javascript - 从 Array JavaScript 获取最新数据

javascript - 在 JQuery 中,如何访问 DOM 元素数组?

以相同速度运行的 Javascript 游戏循环?

Java Applet 游戏循环停止鼠标/键盘输入?

javascript - 如何使用 jquery javascript 重置整个表单..?

javascript - Edge 浏览器上的 devicemotion 事件

java - 小心 : Splitting a string by newlines can cause bothering bugs

java - 由于某种原因无法打印输出