按同一键分组,找到最小值和最大值。 键已订购。
[{key:1,val:2}
{key:1,val:3}
{key:1,val:4}
{key:2,val:4}
{key:2,val:21}
{key:2,val:22}]
到
[2,4,1,22]
事实是,键是有序的。对于实时应用程序,我有一个20000的数组。我可以循环播放每个项目并检查其分组并采取行动,但是我觉得我应该不循环每个对象。可能还有其他可能的解决方案,例如选择随机索引并依靠顺序来优化代码。
任何有效的方法都适用。我提出了一些解决方案,但我有一个庞大的数据集可以传递到图表中,我需要进行优化。
答案 0 :(得分:1)
您可以使用哈希表进行分组,并使用默认数组获取最小值和最大值,并映射新的最小值和最大值。
var data = [{ key: 1, val: 2 }, { key: 1, val: 3 }, { key: 1, val: 4 }, { key: 2, val: 4 }, { key: 2, val: 21 },{ key: 2, val: 1 }],
result = Object
.values(data.reduce(
(r, { key, val }) =>
(t => {
r[key] = ['min', 'max'].map((m, i) => Math[m](t[i], val));
return r;
})
(r[key] || [+Infinity, -Infinity]),
{}
))
.reduce((a, b) => a.concat(b));
console.log(result);