// 定义一个包含对象的数组 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);
名称 | 所属对象 | 类型 | 描述 |
---|
a、e | 全局变量 | Array | 分别是存储对象和普通值的数组,用于演示去重操作 |
Object.values | Object 对象的方法 | Function | 接受一个对象作为参数,返回一个包含该对象所有值的数组 |
reduce | 数组的方法 | Function | 对数组中的每个元素执行一个由你提供的 reducer 函数(升序执行),将其结果汇总为单个返回值 |
[...array] | 展开运算符(用于数组) | 语法 | 将数组展开,可用于将类数组对象或可迭代对象转换为数组 |
名称 | 所属对象 | 类型 | 描述 |
---|
map | 变量(Map 对象实例) | Map | 用于存储键值对的集合,键具有唯一性 |
new Map() | Map 构造函数 | Function | 创建一个新的 Map 对象实例 |
map.set | Map 对象的方法 | Function | 接受一个键和一个值作为参数,将键值对存储到 Map 中,如果键已存在,则更新其对应的值 |
map.values | Map 对象的方法 | Function | 返回一个新的迭代器对象,其中包含 Map 中按插入顺序排列的每个值 |
名称 | 所属对象 | 类型 | 描述 |
---|
new Set() | Set 构造函数 | Function | 创建一个新的 Set 对象实例,自动去除重复的值 |
Set 实例(如 new Set(e) 返回的实例) | 变量(Set 对象实例) | Set | 用于存储唯一值的集合 |
通过以上对数组对象和普通值去重的代码示例及相关属性、方法的说明,希望能帮助你理解和掌握数组去重的实现方式。