比如说,我有以下数组:
[
{a:1, b:"apples"},
{a:3, b:"apples"},
{a:4, b:"apples"},
{a:1, b:"bananas"},
{a:3, b:"bananas"},
{a:5, b:"bananas"},
{a:6, b:"bananas"},
{a:3, b:"oranges"},
{a:5, b:"oranges"},
{a:6, b:"oranges"},
{a:10, b:"oranges"}
]
我想为每种类型的“b”高效地获取具有最高 a 的整个对象,因此我的函数应该产生:
[
{a:4, b:"apples"},
{a:6, b:"bananas"},
{a:10, b:"oranges"}
]
现在我会做这样的事情:
var cache = {};
var resultobj = {};
result = [];
array.forEach(function (r) {
if (cache[r.b] && cache[r.b] > r.a) {
result[r.b] = r;
}
})
for (var key in result) {
result.push(result[key]);
}
这看起来很低效......?
最佳答案
在 ES5 中是两行代码,在 ES6 中是单行代码:
ary = [
{a: 0, b:"apples"},
{a:-3, b:"apples"},
{a:-4, b:"apples"},
{a:1, b:"bananas"},
{a:3, b:"bananas"},
{a:5, b:"bananas"},
{a:6, b:"bananas"},
{a:3, b:"oranges"},
{a:5, b:"oranges"},
{a:6, b:"oranges"},
{a:10, b:"oranges"}
]
// ES5
maxes = {};
ary.forEach(function(e) {
maxes[e.b] = e.b in maxes ? Math.max(maxes[e.b], e.a) : e.a;
});
document.write('<pre>'+JSON.stringify(maxes,0,3));
// ES6
maxes = ary.reduce((m, e) =>
Object.assign(m, { [e.b]: e.b in m ? Math.max(m[e.b], e.a) : e.a }), {});
document.write('<pre>'+JSON.stringify(maxes,0,3));
关于javascript - 获取javascript数组中每个键的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36038100/