在ES6(ECMAScript 2015)中,JavaScript的Set
对象提供了一种存储任何值唯一性的方式,类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set
对象本身并不直接提供数组那样的方法来操作数据(例如map
, filter
, reduce
等),但是可以通过将Set
转换成数组来实现这些操作。下面是一些常用的数组方法及其在Set
上的应用方式:
方法 | 描述 |
|
Set 转换成数组 |
|
对Set 中的每个元素应用一个函数,可以将Set 转换为数组后使用map() 方法。 |
|
使用filter() 方法可以筛选出满足条件的元素。 |
|
reduce() 方法可以用来将Set 中的元素组合起来,例如求和。 |
|
虽然原生Set 没有直接提供这些方法,但可以通过转换为数组来使用。 |
|
这些方法可以用来检查Set 中的元素是否满足特定条件。 |
使用场景和示例代码:
1. 将Set
转换为数组
const set = new Set([1, 2, 3, 4]);
// 使用扩展运算符
const array1 = [...set];
// 使用Array.from()
const array2 = Array.from(set);
2. map()
方法
const set = new Set([1, 2, 3, 4]);
const mappedArray = Array.from(set).map(x => x * 2);
console.log(mappedArray); // [2, 4, 6, 8]
3. filter()
方法
const set = new Set([1, 2, 3, 4, 5]);
const filteredArray = Array.from(set).filter(x => x > 3);
console.log(filteredArray); // [4, 5]
4. reduce()
方法
const set = new Set([1, 2, 3, 4]);
const sum = Array.from(set).reduce((acc, current) => acc + current, 0);
console.log(sum); // 10
5. find()
和 findIndex()
方法
const set = new Set(['apple', 'banana', 'cherry']);
const foundItem = Array.from(set).find(item => item === 'banana');
console.log(foundItem); // 'banana'
6. some()
和 every()
方法
const set = new Set([1, 2, 3, 4]);
const hasEven = Array.from(set).some(x => x % 2 === 0); // 检查是否有偶数
console.log(hasEven); // true
补充
数组去重:
var arr = [1,1,2,2,3,3,1,4,4];
[...new Set(arr)]; // [1, 2, 3, 4]
Array.from(new Set(arr)); // [1, 2, 3, 4]
[...new Set('abababcd')].join(''); // "abcd" 可以字符串去重
new Set('Hello world'); //["Hello","world"]
数组交集:
var a = new Set([1, 2, 3, 4]);
var b = new Set([4, 3, 2, 5]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3, 4}
数组并集:
var a = new Set([1, 2, 3, 4]);
var b = new Set([4, 3, 2, 5]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4, 5}
数组差集:
var a = new Set([1, 2, 3, 4]);
var b = new Set([4, 3, 2, 5]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1, 5}
小结:
[...new Set()] 是一种在JavaScript中用于去重和展开集合的操作。具体来说,new Set()
创建一个新的 Set 对象,该对象存储的元素是唯一的,不会出现重复的值。通过使用扩展运算符(...
),可以将 Set 对象中的元素展开成数组形式。