我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?

伪代码示例:

let array = [100, 0, 50]

array.min() //=> 0
array.max() //=> 100

当前回答

你可以通过扩展Array类型来实现:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};
Array.min = function( array ){
    return Math.min.apply( Math, array );
}; 

从这里开始(作者:John Resig)

其他回答

让arr =[76年20日8日,29日,7日,21日,9] Math.max。应用(数学,arr);/ / 76

如何使用Math.max/Math扩展内置Array对象呢?最小值:

Array.prototype.max = function() { Math.max返回。应用(null,这); }; Array.prototype.min = function() { Math.min返回。应用(null,这); }; 令p = [35,2,65,7,8,9,12,121,33,99]; console.log('最大值为:${p.max()} ' + \nMin值为:${p.min()} ');

这是一个JSFiddle。

扩充内置库可能会导致与其他库的冲突(有些见),所以你可能更喜欢直接将Math.xxx()应用到你的数组:

var min = Math.min.apply(null, arr),
    max = Math.max.apply(null, arr);

另外,假设你的浏览器支持ECMAScript 6,你可以使用扩展语法,它的功能类似于apply方法:

var min = Math.min( ...arr ),
    max = Math.max( ...arr );
var max_of_array = Math.max.apply(Math, array);

完整的讨论见: http://aaroncrane.co.uk/2008/11/javascript_max_api/

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相同

线性的,almost-purely-functional-approach

var min=[0, 29, 25].map((function(max) {max=-Infinity; return function(e) {return max=Math.max(max, e);}})())[0]

更多的例子:

求最小值

function getMin(arr) {
    return (ar || [0, 29, 25]).
        map((function(max) {max=-Infinity; return function(e) {return max=Math.max(max, e);}})())[0];
}

或者使用Array。映射方法与变量闭包

function getMin(arrObjs) {
    return (arrObjs || [{val: 0}, {val: 29}, {val: 25}]).
        map((function(max) {max=-Infinity; return function(e) {return max=(max.val>e.val?max:e);}})())[0];
}

求最大值

function getMax(arr) {
    return (ar || [0, 29, 25]).
        map((function(v) {v=Infinity; return function(e) {return v=Math.min(v, e);}})())[0];
}

对于对象数组

function getMax(arrObjs) {
    return (arrObjs || [{val: 0}, {val: 29}, {val: 25}]).
        map((function(v) {v=-Infinity; return function(e) {return v=(v.val<e.val?v:e);}})())[0];
}