JavaScript 中的对象和数组是常用的数据类型,但是在处理数据时,去重是一个常见的需求。在 ES8 中,标准库中的 Map 和 Set 提供了解决这个问题的新方法。
Map
Map 是一种键值对的数据结构,可以用于存储任意类型的值。在 Map 中,每个键都是唯一的,如果重复添加相同的键,则会覆盖原有的值。使用 Map 可以轻松地实现数组去重。
const arr = [1, 2, 3, 2, 1]; const set = new Set(arr); const uniqueArr = Array.from(set); console.log(uniqueArr); // [1, 2, 3]
上面的代码中,我们首先创建了一个数组 arr
,然后使用 new Set(arr)
创建了一个 Set 集合,Set 集合会自动去重。最后,我们使用 Array.from
方法将 Set 转换为数组。
使用 Map 也可以实现相同的效果:
const arr = [1, 2, 3, 2, 1]; const map = new Map(); arr.forEach(item => { map.set(item, true); }); const uniqueArr = Array.from(map.keys()); console.log(uniqueArr); // [1, 2, 3]
在上面的代码中,我们首先创建了一个空的 Map,然后遍历数组 arr
中的每个元素,并将元素作为键添加到 Map 中。由于 Map 中每个键都是唯一的,重复添加相同的键时,会覆盖原有的值。最后,我们使用 Array.from
方法将 Map 的键转换为数组。
Set
Set 是一种集合数据结构,可以用于存储任意类型的值。在 Set 中,每个值都是唯一的,如果重复添加相同的值,则会被忽略。使用 Set 可以轻松地实现对象数组去重。
const arr = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 1, name: 'Alice' } ]; const set = new Set(arr.map(item => JSON.stringify(item))); const uniqueArr = Array.from(set).map(item => JSON.parse(item)); console.log(uniqueArr); // [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
在上面的代码中,我们首先创建了一个包含对象的数组 arr
,然后使用 arr.map(item => JSON.stringify(item))
将每个对象转换为 JSON 字符串,再使用 new Set
创建一个 Set 集合,Set 集合会自动去重。最后,我们使用 Array.from
方法将 Set 转换为数组,并使用 JSON.parse
将 JSON 字符串转换为对象。
总结
ES8 中的 Map 和 Set 提供了一种简单、高效的方法解决 JavaScript 中的对象和数组去重问题。使用 Map 和 Set 可以避免手动实现去重算法带来的复杂性,同时也可以提高代码的可读性和可维护性。
参考链接
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6614d623d10417a2225172bd