Skip to content

数组去重

约 903 字大约 3 分钟

js数组

2025-02-26

一、数组对象去重代码及注释

// 定义一个包含对象的数组 a,其中有重复的对象(根据 id 判断,这里有两个 id 为 1 的对象)
let a = [{ id: 1, name: 'a' }, { id: 2, name: 'b' }, { id: 3, name: 'c' }, { id: 4, name: 'd' }, { id: 1, name: 'a' }]
// 创建一个 Map 对象 map,Map 是一种键值对的集合,可用于存储唯一的键值对
let map = new Map();
// 遍历数组 a,item 表示数组 a 中的每个对象
for (let item of a) {
    // 使用 Object.values 方法获取对象 item 的所有值组成的数组,然后通过 reduce 方法将数组中的值拼接成一个字符串作为键
    // pre 是上一次 reduce 操作的结果,nex 是当前值,将它们拼接起来
    let key = Object.values(item).reduce((pre, nex) => {
        return pre + nex
    })
    // 将生成的键 key 和对应的对象 item 存储到 map 中,map 会自动根据键的唯一性进行存储
    map.set(key, item)
}
// 这里原本是打印 map 的内容,被注释掉了,可根据需要取消注释查看 map 的内容
// console.log(map);
// 将 map 中的值转换为数组,使用展开运算符 [...map.values()],并重新赋值给数组 a,此时 a 中的对象已去重
a = [...map.values()];
// 打印去重后的数组 a
console.log(a)

二、数组普通值去重代码及注释

// 定义一个包含重复普通值的数组 e,其中有多个 1 和 2
let e = [1, 1, 1, 2, 2]
// 使用 Set 数据结构,Set 会自动去除重复的值,然后使用展开运算符将 Set 转换为数组并赋值给 f
let f = [...new Set(e)]
// 打印去重后的数组 f
console.log(f);

三、涉及的属性和方法说明

1. 数组相关属性和方法

名称所属对象类型描述
a、e全局变量Array分别是存储对象和普通值的数组,用于演示去重操作
Object.valuesObject 对象的方法Function接受一个对象作为参数,返回一个包含该对象所有值的数组
reduce数组的方法Function对数组中的每个元素执行一个由你提供的 reducer 函数(升序执行),将其结果汇总为单个返回值
[...array]展开运算符(用于数组)语法将数组展开,可用于将类数组对象或可迭代对象转换为数组

2. Map 相关属性和方法

名称所属对象类型描述
map变量(Map 对象实例)Map用于存储键值对的集合,键具有唯一性
new Map()Map 构造函数Function创建一个新的 Map 对象实例
map.setMap 对象的方法Function接受一个键和一个值作为参数,将键值对存储到 Map 中,如果键已存在,则更新其对应的值
map.valuesMap 对象的方法Function返回一个新的迭代器对象,其中包含 Map 中按插入顺序排列的每个值

3. Set 相关属性和方法

名称所属对象类型描述
new Set()Set 构造函数Function创建一个新的 Set 对象实例,自动去除重复的值
Set 实例(如 new Set(e) 返回的实例)变量(Set 对象实例)Set用于存储唯一值的集合

通过以上对数组对象和普通值去重的代码示例及相关属性、方法的说明,希望能帮助你理解和掌握数组去重的实现方式。