新闻中心
js对象数组去重的方法
答案:对象数组去重需根据唯一属性、多属性组合或完全深比较判断重复。1. 按单字段如id去重可用reduce或Map结构;2. 多字段组合可拼接key或用JSON.stringify生成标识;3. 全属性相同可用JSON.stringify比较,但不支持undefined、函数等值,推荐lodash的_.isEqual;4. 使用lodash的uniqBy方法更简洁高效。选择方法应基于数据结构和性能需求。

J*aScript中对对象数组去重是一个常见需求,由于对象是引用类型,不能直接用原始值的方式比较。以下是几种实用的去重方法,适用于不同场景。
1. 基于某个唯一属性去重(如id)
如果你的对象数组中有某个字段是唯一的(比如id),可以用这个字段作为判断依据,使用reduce或Map结构来去重。
示例:
const arr = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 1, name: 'Alice' }
];
const unique = arr.reduce((acc, curr) => {
if (!acc.some(item => item.id === curr.id)) {
acc.push(curr);
}
return acc;
}, []);
或者更高效地使用Map:
const unique = Array.from( new Map(arr.map(item => [item.id, item])).values() );
这种方式利用Map的键唯一性,把id作为键,自动覆盖重复项。
2. 基于多个属性组合去重
如果需要根据多个字段联合判断是否重复,可以将这些字段拼接成字符串或使用JSON.stringify生成唯一标识。
OneStory
OneStory 是一款创新的AI故事生成助手,用AI快速生成连续性、一致性的角色和故事。
319
查看详情
const arr = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Alice', age: 25 }
];
const seen = new Set();
const unique = arr.filter(item => {
const key = `${item.name}-${item.age}`;
if (seen.has(key)) {
return false;
}
seen.add(key);
return true;
});
你也可以用JSON.stringify([item.name, item.age])作为key,灵活控制比对字段。
3. 完全深比较去重(所有属性都相同才算重复)
当你要判断整个对象是否完全一样时,可借助深比较函数。虽然JSON.stringify简单,但要注意:属性顺序会影响结果。
const unique = arr.filter((item, index) => {
return index === arr.findIndex(obj =>
JSON.stringify(obj) === JSON.stringify(item)
);
});
注意:这种方法不适用于包含undefined、函数、Symbol等无法被序列化的值。生产环境建议使用lodash的_.isEqual。
4. 使用 lodash 库简化操作
如果你项目中用了lodash,可以直接使用_.uniqBy方法,简洁又可靠。
import { uniqBy } from 'lodash';
const unique = uniqBy(arr, 'id'); // 按id去重
// 或
const unique = uniqBy(arr, item => `${item.name}-${item.age}`);
基本上就这些。选择哪种方式取决于你的数据结构和性能要求。小数据量用filter + findIndex没问题,大数据推荐用Map或Set提升效率。关键是明确“重复”的定义:是某个字段相同?还是全部属性一致?
以上就是js对象数组去重的方法的详细内容,更多请关注其它相关文章!
# 如果你
# 大连seo查询推荐
# seo优化排名代理
# 嵊州网站如何推广的呀
# 肇庆大旺网站优化推广
# 青海政府网站建设
# 殡仪怎么做推广营销
# seo冯耀宗
# 网站网页优化技巧
# 厦门seo布局优化
# 正定商城网站建设价格
# 你也
# 你要
# javascript
# 是一个
# 如何处理
# 多字
# 可以用
# 多个
# 如何实现
# 数据结构
# red
# 大数据
# json
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
Bing引擎入口最新2025 Bing搜索免费官方登录
J*a实现学校排课程序_面向对象结构化项目示例
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
必由学登录入口 必由学官方网站在线访问链接
韩剧圈正版入口页面_韩剧圈官网登录链接
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】
c++如何使用chrono库处理时间_c++标准库时间与日期操作
html5 app怎么运行环境_配html5 app运行环境【教程】
在Socket.IO连接中实现Access Token自动更新与动态重连
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
顺丰快递查单号物流信息 顺丰快递小程序查询入口
深入理解与实现最大堆的Heapify过程:常见错误与修正
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
必由学官方网站入口 必由学学生教师共用登录通道
HTML元素状态管理:根据DIV内容动态启用/禁用按钮
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
必由学在线入口 必由学网页版快速登录入口
Node.js中HTML按钮与J*aScript函数交互的正确姿势
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询
Discord Slash 命令响应超时问题的异步解决方案
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
Python Socket多播通信中指定源IP地址的实践指南
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
12306选座怎么选到临时改签座_12306改签选座策略与步骤
解决Python logging 中 datefmt 导致时间戳固定不变的问题
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
Pyrogram与g4f集成:异步编程实践与常见错误解决
微信网页版官方入口教程 微信网页版网页版快速登录步骤
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
J*aScript中如何高效提取对象指定属性
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
京东单号查询入口_京东快递订单追踪入口
12306怎么选座位选到安静区_12306选座安静区域选择策略
J*aScript 字符串标签转换:使用正则表达式高效替换
必由学官方平台入口 必由学在线课堂登录地址
如何在 Excel Online 和 Google 表格中更改日期格式
Pygame教程:解决用户输入与游戏状态更新不同步问题
小米Civi 4录制视频过暗_小米Civi 4亮度优化
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
汽水音乐在线解析 汽水音乐在线解析入口
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新


2025-11-03
浏览次数:次
返回列表
推荐lodash的_.isEqual;4. 使用lodash的uniqBy方法更简洁高效。选择方法应基于数据结构和性能需求。