我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?
伪代码示例:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?
伪代码示例:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
当前回答
对于一个简洁的现代解决方案,可以对数组执行reduce操作,跟踪当前的最小值和最大值,因此数组只迭代一次(这是最优的)。为了简洁起见,这里使用了解构赋值。
Let array = [100, 0, 50]; Let [min, max] =数组。减少(((prevMin prevMax],咕咕叫)= > (数学。min(prevMin, curr),数学。max(prevMax, curr)],[∞,-∞]); console.log(“分钟:分钟); console.log(“马克斯:Max);
为了只找到最小值或最大值,我们可以以大致相同的方式使用执行reduce操作,但我们只需要跟踪之前的最优值。这种方法比使用apply更好,因为当数组对堆栈来说太大时,它不会导致错误。
Const arr = [- 1,9,3, - 6,35]; //只找到最小值 const min = arr.reduce((a,b)=>Math.min(a,b),无穷大); console.log(“分钟:Min); / / 6 //只找到最大值 const max = arr.reduce((a,b)=>Math.max(a,b), -无穷大); console.log(“马克斯:Max); / / 35
其他回答
还有一种方法:
var arrayMax = Function.prototype.apply.bind(Math.max, null);
用法:
var max = arrayMax([2, 5, 1]);
如果你需要性能,那么对于小数组来说这是最好的方法:
var min = 99999;
var max = 0;
for(var i = 0; i < v.length; i++)
{
if(v[i] < min)
{
min = v[i];
}
if(v[i] >= max)
{
max = v[i];
}
}
你可以在项目的任何地方使用下面的函数:
function getMin(array){
return Math.min.apply(Math,array);
}
function getMax(array){
return Math.max.apply(Math,array);
}
然后你可以调用传递数组的函数:
var myArray = [1,2,3,4,5,6,7];
var maximo = getMax(myArray); //return the highest number
下面是一种从对象数组中获取最大值的方法。创建一个副本(使用切片),然后按降序对副本排序并抓取第一项。
var myArray = [
{"ID": 1, "Cost": 200},
{"ID": 2, "Cost": 1000},
{"ID": 3, "Cost": 50},
{"ID": 4, "Cost": 500}
]
maxsort = myArray.slice(0).sort(function(a, b) { return b.ID - a.ID })[0].ID;
Try
let max= a=> a.reduce((m,x)=> m>x ? m:x);
let min= a=> a.reduce((m,x)=> m<x ? m:x);
让max= a=> a.reduce((m,x)=> m>x ?m: x); 令min= a=> a.reduce((m,x)=> m<x ?m: x); // TEST -像素缓冲区 let arr =数组(200*800*4).fill(0); arr.forEach ((x, i) = > arr[我]= 100 -我% 101); console.log (Max,马克斯(arr)); console.log (Min, Min (arr))
对于数学。Min /max(+应用)我们得到错误:
超过最大调用堆栈大小(Chrome 74.0.3729.131)
// TEST -像素缓冲区 let arr =数组(200*800*4).fill(0); arr.forEach ((x, i) = > arr[我]= 100 -我% 101); // Exception:超过最大调用堆栈大小 尝试{ 让max1= Math.max(…arr) } catch(e) {console.error('Math. error ')Max:', e.message)} 尝试{ let max2= Math.max。应用(null, arr); } catch(e) {console.error('Math.max. error ')应用:',e.message)} // min相同