You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ES6 JavaScript实现按名称去重并保留最大值的数组过滤

用ES6处理对象数组:按name去重并保留最高value

哦,这个需求太常见啦!咱用ES6的特性就能轻松搞定。我给你分享两种实用的实现方式,你可以按需选择:

方法一:使用Array.reduce()(高效简洁)

这个方法只需要遍历一次数组,效率很高。核心思路是用一个临时对象来记录每个name对应的最大value,最后再把这个对象转换成目标数组:

const array = [
  { name: "SI", value: 3 },
  { name: "MI", value: 2 },
  { name: "SI", value: 7 },
  { name: "SI", value: 9 },
  { name: "MI", value: 3 }
];

const result = Object.values(
  array.reduce((acc, curr) => {
    // 如果当前name不在acc里,或者当前value比已存的大,就更新
    if (!acc[curr.name] || curr.value > acc[curr.name].value) {
      acc[curr.name] = curr;
    }
    return acc;
  }, {})
);

console.log(result);
// 输出:[ { name: "SI", value: 9 }, { name: "MI", value: 3 } ]

方法二:先取唯一name再筛选(直观易读)

如果你觉得reduce有点绕,这种分步的方式更直观。先提取所有不重复的name,再对每个name筛选出对应的元素,找出最大的value:

const array = [
  { name: "SI", value: 3 },
  { name: "MI", value: 2 },
  { name: "SI", value: 7 },
  { name: "SI", value: 9 },
  { name: "MI", value: 3 }
];

// 获取所有唯一的name
const uniqueNames = [...new Set(array.map(item => item.name))];

// 对每个name处理,取最大value
const result = uniqueNames.map(name => {
  const maxItem = array
    .filter(item => item.name === name)
    .reduce((prev, curr) => curr.value > prev.value ? curr : prev);
  return maxItem;
});

console.log(result);
// 输出:[ { name: "SI", value: 9 }, { name: "MI", value: 3 } ]

两种方法都能得到你想要的结果~第一种性能更好(只遍历一次数组),第二种逻辑更直白,看你喜欢哪种啦!

内容的提问来源于stack exchange,提问作者Zouari Moez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:23:51