我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?
伪代码示例:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
我怎样才能轻松地获得一个JavaScript数组的最小或最大元素?
伪代码示例:
let array = [100, 0, 50]
array.min() //=> 0
array.max() //=> 100
当前回答
为了防止“max”和“min”被列在“for…”在“循环:
Object.defineProperty(Array.prototype, "max", {
enumerable: false,
configurable: false,
writable: false,
value: function() {
return Math.max.apply(null, this);
}
});
Object.defineProperty(Array.prototype, "min", {
enumerable: false,
configurable: false,
writable: false,
value: function() {
return Math.min.apply(null, this);
}
});
用法:
var x = [10,23,44,21,5];
x.max(); //44
x.min(); //5
其他回答
如果你有一个复杂的对象,你可以使用排序....例如:如果我想获得包含MAX/MIN值低于objs的项目。
var objs= [
{name:"Apple",value:3},
{name:"Love",value:32},
{name:"Cheese",value:1},
{name:"Pork",value:77},
{name:"Xmas",value:99}
];
我会做一个排序:
objs.sort(function(a, b){return a.value-b.value});
然后: objs[0]是最小值,objs[objs. obs]length-1]是最大值。
我是这样解决问题的:
var strDiv = "4,8,5,1"
var arrayDivs = strDiv.split(",")
var str = "";
for (i=0;i<arrayDivs.length;i++)
{
if (i<arrayDivs.length-1)
{
str = str + eval('arrayDivs['+i+']')+',';
}
else if (i==arrayDivs.length-1)
{
str = str + eval('arrayDivs['+i+']');
}
}
str = 'Math.max(' + str + ')';
var numMax = eval(str);
我希望我能帮上忙。
致以最亲切的问候。
如果你像我一样偏执于使用Math.max.apply(根据MDN给出大数组时可能会导致错误),试试这个:
function arrayMax(array) {
return array.reduce(function(a, b) {
return Math.max(a, b);
});
}
function arrayMin(array) {
return array.reduce(function(a, b) {
return Math.min(a, b);
});
}
或者,在ES6中:
function arrayMax(array) {
return array.reduce((a, b) => Math.max(a, b));
}
function arrayMin(array) {
return array.reduce((a, b) => Math.min(a, b));
}
不幸的是,匿名函数是必要的(而不是使用Math.max.bind(Math),因为reduce不仅将a和b传递给它的函数,还将i和对数组本身的引用传递给它,所以我们必须确保我们不会在这些函数上调用max。
让arr =[76年20日8日,29日,7日,21日,9] Math.max。应用(数学,arr);/ / 76
你可以通过扩展Array类型来实现:
Array.max = function( array ){
return Math.max.apply( Math, array );
};
Array.min = function( array ){
return Math.min.apply( Math, array );
};
从这里开始(作者:John Resig)