【问题标题】:Get min-max numbers from multidimensional array从多维数组中获取最小-最大数
【发布时间】:2014-05-22 16:07:36
【问题描述】:

如果我有这样的数组:

array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]

我需要从这个数组中找到最大值和最小值。在这种情况下,max = 33, min = 0

我看到了数组减少的例子,但我不想为内部数组的特定索引找到最大值。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

试试看:

var flat = [];
$.map(array, function(item){ $.merge(flat, item); });

// or merge arrays using `join` and `split`

var flat = array.join().split(',');

var max = Math.max.apply( Math, flat ),
    min = Math.min.apply( Math, flat );

【讨论】:

    【解决方案2】:

    这是基于纯 JS 的解决方案。没有 jQuery:

    var flattened = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]].reduce(function(a, b) {
        return a.concat(b);
    });
    
    Math.max.apply(null, flattened) //33
    
    Math.min.apply(null, flattened) // 0
    

    【讨论】:

      【解决方案3】:
      min = max = array[0][0]
      for (i in array)
          for (j in array[i]) {
              if (array[i][j] > max) max = array[i][j]
              if (array[i][j] < min) min = array[i][j]    
          }
      

      【讨论】:

        【解决方案4】:

        不使用 jquery,使用this answer 将 max 和 min 添加到数组中:

        Array.prototype.max = function() {
           return Math.max.apply(null, this);
        };
        
        Array.prototype.min = function() {
           return Math.min.apply(null, this);
         };
        

        答案变成:

         arr = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]
         maxm = arr.map(function(a){return a.max()}).max();
         minm = arr.map(function(a){return a.min()}).min();
        

        【讨论】:

          【解决方案5】:

          带下划线:

          var array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]];
          var max = _.chain(array)
                     .flatten()
                     .max()
                     .value()
          

          很容易理解。

          【讨论】:

            【解决方案6】:

            你可以这样做:

            var array=[[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]];
            var newArr=array.join().replace(/\[\]/,"").split(',').map(function(x){return +x}); 
            Math.max.apply(null,newArr); // 33
            Math.min.apply(null,newArr); // 0
            

            【讨论】:

            • 你很出色。太好了,无话可说
            猜你喜欢
            • 2017-11-03
            • 1970-01-01
            • 2021-07-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-25
            • 1970-01-01
            相关资源
            最近更新 更多