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

如何过滤List中NAME属性重复的对象并保留唯一实例?能否通过Lodash实现该需求?

如何用Lodash移除数组中重复name属性的对象?

当然可以用Lodash轻松搞定这个需求!针对你想要的两种结果——要么保留第一个出现的重复项,要么保留最后一个——我给你整理了具体的实现方式:


结果一:保留第一个出现的重复项

Lodash的_.uniqBy方法专门用来解决这种按属性去重的场景,它会遍历数组,只保留每个属性值第一次出现的对象。

代码示例:

const _ = require('lodash');
const arr = [ 
  {name: "x", place: "a", age: "13" }, 
  {name: "x", place: "b", age: "14" }, 
  {name: "y", place: "c", age: "15" }, 
  {name: "d", place: "d", age: "16" } 
];

const uniqueArr = _.uniqBy(arr, 'name');
console.log(uniqueArr);
// 输出:[{name: "x", place: "a", age: "13"}, {name: "y", place: "c", age: "15"}, {name: "d", place: "d", age: "16"}]

结果二:保留最后一个出现的重复项

如果想要保留最后一次出现的同名对象,有两种常用的Lodash实现方式:

方法1:反转数组+_.uniqBy

先把数组反转,让最后出现的对象跑到前面,用_.uniqBy去重后再反转回来,就能得到保留最后一项的结果:

const _ = require('lodash');
const arr = [ 
  {name: "x", place: "a", age: "13" }, 
  {name: "x", place: "b", age: "14" }, 
  {name: "y", place: "c", age: "15" }, 
  {name: "d", place: "d", age: "16" } 
];

// 用[...arr]创建原数组副本,避免修改原数组
const reversedArr = _.reverse([...arr]);
const uniqueReversed = _.uniqBy(reversedArr, 'name');
const uniqueArr = _.reverse(uniqueReversed);

console.log(uniqueArr);
// 输出:[{name: "x", place: "b", age: "14"}, {name: "y", place: "c", age: "15"}, {name: "d", place: "d", age: "16"}]

方法2:用_.reduce手动覆盖

用_.reduce遍历数组,每次遇到同名对象就替换掉结果数组里已有的那个,最终得到的就是保留最后一项的去重数组:

const _ = require('lodash');
const arr = [ 
  {name: "x", place: "a", age: "13" }, 
  {name: "x", place: "b", age: "14" }, 
  {name: "y", place: "c", age: "15" }, 
  {name: "d", place: "d", age: "16" } 
];

const uniqueArr = _.reduce(arr, (result, currentItem) => {
  // 查找结果数组中是否已有同名对象
  const existingItemIndex = _.findIndex(result, { name: currentItem.name });
  if (existingItemIndex === -1) {
    // 没有就添加
    result.push(currentItem);
  } else {
    // 有就替换成当前项(最后出现的)
    result[existingItemIndex] = currentItem;
  }
  return result;
}, []);

console.log(uniqueArr);
// 同样输出结果二

额外补充:原生JS实现(不用Lodash)

如果不想引入Lodash,用原生JS的Map也能快速实现:

  • 保留第一个出现的项:
const uniqueArr = Array.from(new Map(arr.map(item => [item.name, item])).values());
  • 保留最后一个出现的项:
const uniqueArr = Array.from(arr.reduce((map, item) => map.set(item.name, item), new Map()).values());

内容的提问来源于stack exchange,提问作者Omar EL KHAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:17:31