获取javascript中具有最高值的数组键

获取javascript中具有最高值的数组键,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个类似的数组 arr[1] = 234; arr[2] = 345; ... arr[40] = 126; 如何在不重复数组的情况下获取具有最大值的元素的索引?如果数组未排序,则不进行迭代就无法执行此操作。两种解决方案:按降序排序并获取第一个元素,或者: function bigger(array) { if (array.length < 1) { return -1; } bigger = 0; for(var i=1; i<array.leng

我有一个类似的数组

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

arr[40] = 126;

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

如果数组未排序,则不进行迭代就无法执行此操作。

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

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;
}
函数(数组){
if(array.length<1){
返回-1;
}
更大=0;
对于(变量i=1;i数组[更大]){
更大=i;
}
}
回报更大;
}
您可以使用两个变量进行冷优化,一个用于位置,另一个用于内容。

尝试以下操作:

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;
    }
}
var max_index=-1;
var最大值=Number.MIN值;
对于(变量i=0;i最大值)
{
最大值=arr[i];
最大指数=i;
}
}

保持数组排序或使用堆

否则迭代。即使您发现了一些技巧,它仍然需要在下面迭代,所以为什么不迭代呢


如果代码似乎太多,请将其放在单独的例程中。

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

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;
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);
}
与此相反:

var arr = { 1, 500, 2 };

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

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

var arr = new Array();
arr[0] = 1;
arr[1] = 500;
arr[2] = 2;
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属性。

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

arr.indexOf(Math.max.apply(window,arr))
但是现在Math.max正在进行迭代,就像sort一样


有人必须查看未排序数组中的每个项。

使用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);

获取javascript中具有最高值的数组键

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

这是一个老问题,但下面是我对用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

没有内置的操作可以做到这一点。您必须使用循环编写自己的函数。这是一个不错的非cpu密集型解决方案!