当前位置: 首页 > news >正文

javaScript-----一维数组和数组对象去重的多种方法

在JavaScript中,可以使用多种方法对一维数组和数组对象进行去重。以下是一些常见的方法:

一维数组去重

1. 使用 Set

Set 只允许唯一值,可以直接用于一维数组的去重。

const arr = [1, 2, 3, 1, 2];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]

2. 使用 filter 和 indexOf

通过 filter 方法配合 indexOf 来去重。

const arr = [1, 2, 3, 1, 2];
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(uniqueArr); // [1, 2, 3]

3. 使用 reduce

利用 reduce 方法进行去重。

const arr = [1, 2, 3, 1, 2];
const uniqueArr = arr.reduce((acc, current) => {if (!acc.includes(current)) {acc.push(current);}return acc;
}, []);
console.log(uniqueArr); // [1, 2, 3]

4. 使用对象属性作为键

通过一个对象记录已存在的值,实现去重。

const arr = [1, 2, 3, 1, 2];
const map = {};
const uniqueArr = arr.filter(item => {if (!map[item]) {map[item] = true;return true;}return false;
});
console.log(uniqueArr); // [1, 2, 3]

数组对象去重

1. 使用 Set 和 JSON.stringify

利用 Set 的特性,结合 JSON.stringify 进行去重。

const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = Array.from(new Set(arr.map(a => JSON.stringify(a)))).map(e => JSON.parse(e));
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]

2. 使用 filter 和 findIndex

通过 filter 方法配合 findIndex 来去重。

const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = arr.filter((item, index) => arr.findIndex(obj => JSON.stringify(obj) === JSON.stringify(item)) === index
);
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]

3. 使用 reduce

利用 reduce 方法进行去重。

const arr = [{ id: 1 }, { id: 2 }, { id: 1 }];
const uniqueArr = arr.reduce((acc, current) => {const x = acc.find(item => JSON.stringify(item) === JSON.stringify(current));if (!x) {return acc.concat([current]);} else {return acc;}
}, []);
console.log(uniqueArr); // [{ id: 1 }, { id: 2 }]

 


http://www.mrgr.cn/news/63683.html

相关文章:

  • 【php常用公共函数】php获取指定时间段相差几小时,几分钟,几秒
  • Docker | 校园网上docker pull或者docker run失败的一种解决方法
  • Java面试经典 150 题.P169. 多数元素(005)
  • 瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现
  • 自动化运维
  • IDEA中通义灵码的使用技巧
  • 【数据结构】guard
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-10
  • 虚拟机 Ubuntu 扩容
  • 二十八、Python基础语法(面向对象-下)
  • C. Gorilla and Permutation
  • 打响反对人工智能的第一枪
  • 多处理机调度(李昂学长视频总结)25新增考点
  • 音视频入门基础:FLV专题(22)——FFmpeg源码中,获取FLV文件音频信息的实现(中)
  • 奇瑞不客气智驾 晚不晚?
  • 浅谈DDD(领域驱动设计)
  • 齐次线性微分方程的解的性质与结构
  • 云计算的优势及未来发展趋势
  • 【Leecode】Leecode刷题之路第37天之解数独
  • 1007:计算(a+b)×c的值
  • 事件的传递
  • java基础知识21 异常处理try与throw的相互处理e.getcause
  • 第一讲 递推与递归
  • 【qt qtcreator使用】【正点原子】嵌入式Qt5 C++开发视频
  • 一些swift问题
  • 高频电子线路---倍频器与振荡器