如何呢:
articleWithMaxNumber = articles.slice(0).sort(
function(x, y) { return y.number - x.number })[0]
如果你需要一个索引:
index = articles.indexOf(articleWithMaxNumber)
对于那些认为排序可能是获取最大值的过度操作的人:
articleWithMaxNumber = articles.reduce(function(max, x) {
return x.number > max.number ? x : max;
})
以下是使用map-reduce查找函数应用的最大值的通用方法:
function maxBy(array, fn) {
return array.map(function(x) {
return [x, fn(x)]
}).reduce(function(max, x) {
return x[1] > max[1] ? x : max;
})[0]
}
articleWithMaxNumber = maxBy(articles, function(x) { return x.number })
一些人担心使用
sort
方法比迭代方法“慢”,与此相关的IT技术。这里有一个
fiddle,使用这两种方法处理了一个包含
50000个元素的数组。在我的计算机上,
sort
方法比迭代方法“慢”约
50毫秒。视应用而定,但在大多数情况下,这不是值得谈论的事情。
var articles = [];
var len = 50000;
while (len--) {
var article = {};
article.text = "foobar";
article.color = "red";
article.number = Math.random();
articles.push(article);
}
d = performance.now();
max1 = articles.slice(0).sort(
function(x, y) {
return y.number - x.number
})[0]
time1 = performance.now() - d
d = performance.now();
max2 = articles.reduce(function(max, x) {
return x.number > max.number ? x : max;
})
time2 = performance.now() - d
document.body.innerHTML = [time1, time2].join("<br>")