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 }]
相关推荐
用户3802258598241 分钟前
vue3源码解析:响应式机制
前端·vue.js
bo521003 分钟前
浏览器渲染机制详解(包含渲染流程、树结构、异步js)
前端·面试·浏览器
普通程序员9 分钟前
Gemini CLI 新手安装与使用指南
前端·人工智能·后端
Web小助手10 分钟前
js高级程序设计(日期)
javascript
Web小助手10 分钟前
js高级程序设计(4/5章节)
javascript
山有木兮木有枝_11 分钟前
react受控模式和非受控模式(日历的实现)
前端·javascript·react.js
十盒半价12 分钟前
从递归到动态规划:手把手教你玩转算法三剑客
javascript·算法·trae
流口水的兔子13 分钟前
作为一个新手,如果让你去用【微信小程序通过BLE实现与设备通讯】,你会怎么做,
前端·物联网·微信小程序
多啦C梦a16 分钟前
🪄 用 React 玩转「图片识词 + 语音 TTS」:月影大佬的 AI 英语私教是怎么炼成的?
前端·react.js
呆呆的心16 分钟前
大厂面试官都在问的 WEUI Uploader,源码里藏了多少干货?🤔
前端·微信·面试