我需要计算大数组的最小值/最大值。我知道Math.max.apply()
,但是在大型数组上它会因堆栈溢出异常而失败。有什么简单的解决方案吗?
问问题
2285 次
6 回答
7
使用
sort()
方法对数组进行排序 它使用快速排序算法对数组进行排序由于数组按升序排序,因此最后一个元素是最大值
var arr = [1,4,6,4, ...]; arr.sort((a, b) => a - b); var max = arr[arr.length - 1];
于 2013-06-05T18:25:50.023 回答
3
Array.prototype.min = function() {
var r = this[0];
this.forEach(function(v,i,a){if (v<r) r=v;});
return r;
};
来自JavaScript:最小和最大数组值?讨论此问题的其他解决方案的地方
仅供参考:我刚刚搜索了“最大最小大数组”并发现这是第一个结果......
于 2013-06-05T18:22:30.367 回答
2
为什么不直接遍历整个数组呢?
var max = Number.MIN_VALUE, min = Number.MAX_VALUE;
for (var i = 0, len=list.length; i < len; i++) {
if (list[i] > max) max = list[i];
if (list[i] < min) min = list[i];
}
编辑:
对于最大值:
if (typeof Array.prototype.GetMax === "undefined") {
Array.prototype.GetMax = function() {
var max = Number.MAX_VALUE;
for (var i = 0, len=this.length; i < len; i++) {
if (this[i] > max) max = this[i];
}
return max;
}
}
分钟:
if (typeof Array.prototype.GetMin === "undefined") {
Array.prototype.GetMin = function() {
var min = Number.MIN_VALUE;
for (var i = 0, len=this.length; i < len; i++) {
if (this[i] < min) min = this[i];
}
return min;
}
}
对彼此而言:
if (typeof Array.prototype.GetMaxMin === "undefined") {
Array.prototype.GetMaxMin = function() {
var max = Number.MIN_VALUE, min = Number.MAX_VALUE;
for (var i = 0, len=this.length; i < len; i++) {
if (this[i] > max) max = this[i];
if (this[i] < min) min = this[i];
}
return { Max: max, Min: min};
}
}
于 2013-06-05T18:20:58.170 回答
0
尝试这个
var arr = [];
for(var i=1000000;i>0;i--)
{
arr.push(i);
}
//we create a copy of the original array through arr.concat() since we do not want to change the original sorting order of the array
//we pass a function in the sort method as by default it sorts alphabetically instead of numerically. So 99 will be smaller than 100.
var arrMaxMin = arr.concat().sort(function(a,b){return a-b});
arrMaxMin[0]; //min
arrMaxMin[arrMaxMin.length - 1]; //max
于 2013-06-05T18:28:39.293 回答
0
嘿,为什么不将数组切成更小的数组,然后在该数组上您可以轻松使用 Math.max.apply(Math,individual arrays)。但请记住将所有子数组重新初始化为 null,以便在需要的最大值后恢复内存获得
于 2013-06-05T18:33:23.330 回答
0
我是否应该假设您已经想到了这一点:
var maxSoFar = -9999999;
for (var i = 0; i < array.length ; ++i) {
if (array[i] > maxSoFar) {
maxSoFar = array[i];
}
... similar for minSoFar ...
}
于 2013-06-05T18:21:19.873 回答