javascript - 获取javascript数组中每个键的最大值

标签 javascript arrays

比如说,我有以下数组:

[ 
  {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/

相关文章:

javascript - 选择以 "data-"开头的元素

javascript - 部署新版本时清除浏览器缓存

javascript - 如果浏览器调整大小,如何使我的选择框在我的固定页脚溢出

arrays - 如何获取数组中最大元素的索引?

javascript - 如何将 props 传递给变量?

c++ - 使用 ispunct 的函数断言失败

sql - 如何将数组添加到 SQL (Postgres) 中的数组数组

c - 字符串数组上的基本 qsort 在 qsort() 中崩溃

javascript - 分解 Javascript 数组数据

javascript - 如何使用纬度和经度获取位置名称或城市?