【发布时间】:2011-05-01 19:58:42
【问题描述】:
我有一个类似的数组
arr[1] = 234;
arr[2] = 345;
...
arr[40] = 126;
如何在不重复数组的情况下获取具有最高值的元素的索引?
【问题讨论】:
-
没有内置的操作可以做到这一点。您必须使用循环编写自己的函数。
标签: javascript jquery arrays
我有一个类似的数组
arr[1] = 234;
arr[2] = 345;
...
arr[40] = 126;
如何在不重复数组的情况下获取具有最高值的元素的索引?
【问题讨论】:
标签: javascript jquery arrays
您可以应用 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);
【讨论】:
试试这个:
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;
}
}
【讨论】:
您可以使用函数来设置变量。并跟踪该函数中的最大值。这是一个没有类型检查、测试或支持删除值的快速示例。
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 };
缺点是它不自然,需要你使用函数来获得正确的结果。
【讨论】:
保持数组排序或使用堆。
否则迭代。即使你找到了一些技巧来做到这一点,它仍然需要在下面进行迭代,所以为什么不迭代呢?
如果代码看起来太多,请将其放在单独的例程中。
【讨论】:
两种解决方案:降序排序并获取第一个元素或:
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;
}
您使用两个变量进行冷优化,一个用于位置,另一个用于内容。
【讨论】:
您可以在某处进行迭代(在您的代码中或在 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 属性。
【讨论】:
这是个老问题,但这是我用 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
【讨论】: