【问题标题】:JavaScript finding the largest integer in an array of arraysJavaScript 查找数组数组中的最大整数
【发布时间】:2015-10-30 06:41:51
【问题描述】:
function largestOfFour(arr) {
    var newArray = [];
    for(var i =0; i <=arr.length-1; i++){
        console.log(arr[i]);
        newArray[i] = Math.max(arr[i]);
    }
    console.log(newArray);
              // You can do this!
    return newArray;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

所以我不明白为什么我得到NaN,即使我在我的math.max 函数中提供了一个参数。在我的 for 循环中的 console.log 中,我让主数组中的每个数组都显示出来。这意味着如果我在 max 函数中使用相同的arr[i],它应该给我该子数组的最大值。

【问题讨论】:

标签: javascript


【解决方案1】:

您将一个数组传递给Math.max,并期望它返回该数组中的最大值。

但是,Math.max 返回其参数中的最大值。所以使用

var newArray = [];
for(var i =0; i < arr.length; ++i)
  newArray[i] = Math.max.apply(void 0, arr[i]);

在 ES6 中,您可以使用 arrow functionsspread operator 来简化:

arr.map(a => Math.max(...a));

【讨论】:

  • 酷!您的解决方案有效,但是在我使用它之前,我想知道 math.max.apply() 中的 void 0 是什么意思?
  • @AliAslam 是函数内部用作this 值的值。既然Math.max不用,那也没关系。
  • 或者只是newArray = arr.map(Math.max.apply.bind(Math.max, Math)) :)
【解决方案2】:

它不会那样工作。 Math.max 需要单独的数字。您可以使用apply获得所需的输出

function largestOfFour(arr) {
    return arr.map(function(subArr){
        return Math.max.apply(Math, subArr);
    });
}

【讨论】:

    【解决方案3】:

    如果你想要最终的最大值,请这样做。

    var original = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];
    Math.max.apply(null, original.map(function(arr) { return Math.max.apply(null, arr); }));
    

    或者如果你想要每个数组的最大值就这样做

    original.map(function(arr) { return Math.max.apply(null, arr); });
    

    【讨论】:

    • 所以这实际上返回了所有数组中的单个最大值,这不是 OP 的意图。但可以是一个单独的任务
    【解决方案4】:

    使用 lodash

    var x = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
    _.flatten(x).max();
    

    【讨论】:

      【解决方案5】:

      编辑: 为了向数组添加值,我建议使用 push 方法。如: NewArray.push(Math.max(...sub[i]));或 newarray.push(math.max.apply(null, sub[i])。 另一种方法是在声明数组时分配它的大小: var newArray = new Array(arr.length); javascript 中有这个新的扩展运算符 (...) !

      【讨论】:

      • Math.max([1,2,3]) 找不到最大 aomng 数组元素。它返回NaN
      • 是的!事实上,我做了更好的研究,Math.max 只接受数字,而不是数组。如果您通过 sub[i],您将获得 NaN。我建议 newarray.push(null, math.max.apply(sub[i]))
      • 在广泛使用的 javascript(即浏览器)中没有传播运算符 (...)。正如其他答案中提到的,它是 ES6 的一个特性
      猜你喜欢
      • 2018-08-27
      • 2015-07-04
      • 1970-01-01
      • 2016-05-25
      • 2012-09-04
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多