【问题标题】:Get the array key with the highest value in javascript获取javascript中值最高的数组键
【发布时间】:2011-05-01 19:58:42
【问题描述】:

我有一个类似的数组

arr[1] = 234;
arr[2] = 345;
...

arr[40] = 126;

如何在不重复数组的情况下获取具有最高值的元素的索引?

【问题讨论】:

  • 没有内置的操作可以做到这一点。您必须使用循环编写自己的函数。

标签: javascript jquery arrays


【解决方案1】:

您可以应用 Math.max 并将数组作为参数传递-

arr.indexOf(Math.max.apply(window,arr))

但现在 Math.max 正在执行迭代,就像 sort 所做的那样。

某人必须查看未排序数组中的每个项目...

【讨论】:

    【解决方案2】:

    有了jQuery,就这么简单:

    // Get the max value from the array    
    maxValue = Math.max.apply(this, arr);
    
    // Get the index of the max value, through the built in function inArray
    $.inArray(maxValue,arr);
    

    【讨论】:

      【解决方案3】:

      如果数组未排序,则不进行迭代就无法做到这一点。

      【讨论】:

        【解决方案4】:

        获取javascript中值最高的数组键

        var cars = ["Saab", "Volvo", "BMW"];
        var max_car_result = cars[cars.length-1];
        alert(max_car_result);
        

        【讨论】:

          【解决方案5】:

          试试这个:

          var max_index = -1;
          var max_value = Number.MIN_VALUE;
          for(var i = 0; i < arr.length; i++)
          {
              if(arr[i] > max_value)
              {
                  max_value = arr[i];
                  max_index = i;
              }
          }
          

          【讨论】:

            【解决方案6】:

            您可以使用函数来设置变量。并跟踪该函数中的最大值。这是一个没有类型检查、测试或支持删除值的快速示例。

            Array.prototype.maxValue = null;
            
            Array.prototype.setIndex = function(index, value){
              this[index] = value;
              if (value > this.maxValue || this.maxValue == null)
                this.maxValue = value;
            }
            
            
            var arr = new Array();
            arr.setIndex(0, 234);
            arr.setIndex(1, 500);
            arr.setIndex(2, -5);
            
            var maxValue = arr.maxValue;
            

            如果您当前正在设置这样的项目,这显然会更好:

            var arr = new Array();
            arr[0] = 1;
            arr[1] = 500;
            arr[2] = 2;
            

            而不是这样:

            var arr = { 1, 500, 2 };
            

            缺点是它不自然,需要你使用函数来获得正确的结果。

            【讨论】:

            • 不错的非 CPU 密集型解决方案!
            【解决方案7】:

            保持数组排序或使用堆。

            否则迭代。即使你找到了一些技巧来做到这一点,它仍然需要在下面进行迭代,所以为什么不迭代呢?

            如果代码看起来太多,请将其放在单独的例程中。

            【讨论】:

              【解决方案8】:

              两种解决方案:降序排序并获取第一个元素或:

              function bigger(array) {
                if (array.length < 1) {
                  return -1;
                }
                bigger = 0;
                for(var i=1; i<array.length;i++ ) { 
                  if(array[i] > array[bigger]) {
                    bigger = i;
                  }
                }
                return bigger;
              }
              

              您使用两个变量进行冷优化,一个用于位置,另一个用于内容。

              【讨论】:

                【解决方案9】:

                您可以在某处进行迭代(在您的代码中或在 JQuery.each() 中),或者您可以定义如下内容:

                Array.prototype.mpush = function(v)
                {
                  var maxv = this.maxValue || Number.MIN_VALUE;
                  if( v > maxv ) { this.maxValue = v; this.maxIndex = this.length; }
                  this.push(v);
                }
                

                并使用 arr.mpush(v) 填充您的数组。在这种情况下,数组将具有 maxIndex 属性。

                【讨论】:

                  【解决方案10】:

                  这是个老问题,但这是我用 javascript 制作的 PHP 脚本 max() 的简单模拟:

                  function max(array){
                      if(Object.prototype.toString.call( array ) === '[object Array]'){
                          return array[(array.length-1)];
                      }
                      else return 0;
                  }
                  

                  数组中最后一个键的返回值,如果没有找到则返回0

                  可能有人帮忙。

                  你可以像这样使用它:

                  var array = ['bananaman','spiderman','ironman','superman','batman','manman'];
                  var getLast = max(array);
                  if(getLast !== 0)
                      alert(getLast); // manman
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-06-28
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多