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

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.kler.cn/a/379498.html

相关文章:

  • 拯救者y7000p 打开XMP
  • 每周算法比赛
  • android14修改默认锁屏方式为无
  • RabbitMQ的原理和集成使用
  • Vscode使用launch.json进行传参调试代码
  • 美国大学生数学建模竞赛(MCM/ICM)介绍
  • 使用 MySQL Workbench 创建和管理用户
  • 手册更新 | RK3568开发板Openwrt文件系统构建
  • ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
  • Win/Linux/Kylin 系统安装指定版本 jdk(8u171为例)
  • 学习记录:js算法(八十四):子集 II
  • vue系列==vue组件
  • sparkSQL面试题
  • Go语言sync.WaitGroup与errgroup.Group用法详解
  • 迅为itop-3568开发板AMP双系统使用手册之烧写AMP镜像
  • 力扣第33题:搜索旋转排序数组
  • 聚水潭数据集成到MySQL的技术实操与解决方案
  • Vue前端开发:事件对象参数
  • Docker-安装
  • Flutter UI架构(3)
  • gulp入门教程18:gulp插件gulp-clean
  • RLHF中,人类反馈数据格式是什么样的?
  • PostgreSQL 取前一列不为 NULL
  • 程序《工资分类收税》
  • 2024/11/3 随笔笔记
  • 深度学习笔记之BERT(一)BERT的基本认识