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

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

一维数组去重

1. 使用 Set

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

复制代码
const arr = [1, 2, 3, 1, 2];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]
2. 使用 filterindexOf

通过 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. 使用 SetJSON.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. 使用 filterfindIndex

通过 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 }]
相关推荐
星夜落月5 分钟前
Web-Check部署全攻略:打造个人网站监控与分析中心
运维·前端·网络
摘星编程8 分钟前
OpenHarmony + RN:ProgressBar进度条组件
javascript·react native·react.js
怎么没有名字注册了啊9 分钟前
C++ 进制转换
开发语言·c++
代码游侠12 分钟前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法
冰暮流星15 分钟前
javascript之双重循环
开发语言·前端·javascript
爱敲点代码的小哥20 分钟前
C#视觉模板匹配与动态绘制实战(绘制和保存,加载tb块,处理vpp脚本的方式)
前端·javascript·信息可视化
墨月白23 分钟前
[QT]QProcess的相关使用
android·开发语言·qt
小小码农Come on23 分钟前
QT信号槽机制原理
开发语言·qt
KoiHeng30 分钟前
Java的文件知识与IO操作
java·开发语言
-Try hard-37 分钟前
完全二叉树、非完全二叉树、哈希表的创建与遍历
开发语言·算法·vim·散列表