Javascript 按id从对象数组中获取属性的最大值

Javascript 按id从对象数组中获取属性的最大值,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有一个如下所示的对象数组: const input = [ {id: 3, value: 2}, {id: 0, value: 3}, {id: 2, value: 8}, {id: 1, value: 5}, {id: 0, value: 2}, {id: 1, value: 6} ] 我正试图通过id构建一个最大值的数组,id作为索引。对于我们的示例,所需的输出如下: const output = [ 3, 6, 8, 2 ] 我还假设我提前知道唯一ID的数量,

我有一个如下所示的对象数组:

const input = [
  {id: 3, value: 2},
  {id: 0, value: 3},
  {id: 2, value: 8},
  {id: 1, value: 5},
  {id: 0, value: 2},
  {id: 1, value: 6}
]
我正试图通过id构建一个最大值的数组,id作为索引。对于我们的示例,所需的输出如下:

const output = [ 3, 6, 8, 2 ]
我还假设我提前知道唯一ID的数量,并且它们从0开始依次递增。我的第一个打击是在一个正确长度的空数组上
.map()
,为每个id构建带有
.filter()
的中间数组,然后对过滤后的数组使用
Math.max()

const myAttempt = Array(4).map((_, index) => {
  const filtered = input.filter(item => item.id === index);
  return Math.max(filtered);
});
我从中得到的是:

myAttempt = [ 4 empty slots ];
我怀疑我的
数组(4)
位完全不正确,答案可能涉及
.reduce()
,但我从未真正掌握reduce的诀窍,因此非常感谢您的帮助

注:我更喜欢避免使用lodash或jQuery库的答案。

用于收集每个键的最高值。使用以下命令转换为数组:

const输入=[
{id:3,值:2},
{id:0,值:3},
{id:2,值:8},
{id:1,值:5},
{id:0,值:2},
{id:1,值:6}
]
const result=Object.values(input.reduce((r,{id,value})=>{
r[id]=+r[id]>值?r[id]:值;
返回r;
}, {}));

控制台日志(结果)
这个想法很好,但是在进入
Math.max
之前,您缺少
.map(item=>item.value)
。另外,
Math.max
接受多个参数而不是数组,因此使用扩展语法。使用
array.from({length:4},(u,index)=>…)
Aha,感谢您的澄清和指向其他问题的链接。我肯定是被新的阵列/地图的怪异所吸引,以至于无法思考其他的问题!谢谢你教我怎么用这种方法!将在时间到期后立即接受“使用
array.values()
”转换为数组-不,只需从
[]
开始,因为累加器可能会创建一个带有孔的数组(例如并非所有ID都在那里),而
Object.values()
不会。我再次感到困惑。在这个解决方案中,
Array.values()
在哪里,我将如何像您所说的那样使用累加器?我注意到,如果我运行
input.reduce
而不使用
对象。它周围的值
,答案将变成
{0:3,1:6,2:8,id:3,value:2}
,这是预期的吗?