Set 是 ES6 提供的一种新的数据结构。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。Set 是值的集合。
Array 中的元素可以是原始类型或对象类型。Array 是有序数据的集合。
Set 类似于 Array,同 Array 方法中有相似之处。Set 的一个特性是,没有相同的成员(完全相等的成员)。
所以在不需要有重复元素的情况下,可以用 Set 数据结构来替代 Array。
同时,因为这一特性,可以用 Set 数据结构来转换没有重复的数组。
const s = new Set();
console.log(s) // Set []
const arr = new Array();
console.log(arr) // Array[]?
const s = new Set();
s.add(1).add(2);
console.log(s.size); // 2
s.size = 3; // 3
console.log(s.size); // 2, size 值不可以改变
const arr1 = new Array(2);
console.log(arr1.length) // 2(如果用 Array 构造函数创建的数组,其值只有一个,且该值为数字,则该值表示的是该数组的长度)
console.log(arr1) // [empty × 2]
const arr2 = new Array(1, 2, 3);
console.log(arr2.length) // 3
arr2.length = 2;
console.log(arr2.length); // 2,lenght 值可以改变
const s = new Set();
console.log(s) // Set []
s.add(1);
console.log(s) // Set [ 1 ]
s.add(2).add(‘hello‘); // 可以链式调用
console.log(s) // Set(3) [ 1, 2, ‘hello‘ ]
s.add(2); // 试图添加一个重复的值 2
console.log(s) // Set(3) [ 1, 2, ‘hello‘ ]
const animals = [‘pigs‘, ‘goats‘, ‘sheep‘];
const count = animals.push(‘cows‘);
console.log(count) // 4
console.log(animals) // Array ["pigs", "goats", "sheep", "cows"]
const arr1 = [1, 2, 3];
console.log(arr1.unshift(4, 5)); // 5
console.log(arr1); // Array [4, 5, 1, 2, 3]
const months = [‘Jan‘, ‘March‘, ‘April‘, ‘June‘];
months.splice(1, 0, ‘Feb‘); // 在索引为 1 的位置删除 0 个元素,添加 ‘Feb‘ 元素
console.log(months); // Array ["Jan", "Feb", "March", "April", "June"]
const s9 = new Set();
s9.add(1).add(2).add(3); // Set(3) [ 1, 2, 3 ]
s9.delete(4) // false
s9.delete(3) // true
const team = ["前端产品组", "前端产品组", "前端产品组", "军工算法组"];
const popped = team.pop();
console.log(team) // ["前端产品组", "前端产品组", "前端产品组"]
console.log(popped) // "军工算法组"
const fruits = [‘banana‘, ‘apple‘, ‘orange‘];
const shifted = fruits.shift();
console.log(shifted) // "banana"
console.log(fruits) // Array ["apple", "orange"]
const years = [‘1919‘, ‘2008‘, ‘2018‘, ‘2020‘];
const spliced = years.splice(1, 1); // 在索引为 1 的位置删除 1 个元素
console.log(spliced); // "2008"
console.log(years); // Array ["1919", "2018", "2020"]
let s = new Set();
s.add(1);
s.add("foo");
s.size; // 2
s.has("foo"); // true
s.clear();
s.size; // 0
s.has("bar") // false
let arr = new Array(4, 5, 6);
arr.length = 0;
console.log(arr); // Array []
console.log(arr.length); // 0
let arr = new Array(4, 5, 6);
arr = [];
console.log(arr); // Array []
console.log(arr.length); // 0
const s = new Set();
s.add(‘foo‘);
console.log(s.has(‘foo‘)); // true
console.log(s.has(‘bar‘)); // false
const pets = [‘cat‘, ‘dog‘];
console.log(pets.includes(‘cat‘)); // true
console.log(pets.includes(‘pig‘)); // false
const beasts = [‘ant‘, ‘camel‘, ‘duck‘, ‘ant‘];
console.log(beasts.indexOf(‘ant‘)); // 0
console.log(beasts.indexOf(‘ant‘, 2)); // 3
console.log(beasts.indexOf(‘dog‘)); // -1
let s = new Set([1, 4, 9]);
s.forEach((value, key) => console.log(key + ‘ : ‘ + value))
// 1 : 1
// 4 : 4
// 9 : 9
第一个参数是处理函数,该函数的参数依次是 “健值,健名,集合本身”。Set 结构的健值就是健名,所以第一个参数和第二个参数永远相同。
let arr = new Array(1, 4, 9);
arr.forEach((value, index) => console.log(index + ‘ : ‘ + value));
// 0 : 1
// 1 : 4
// 2 : 9
与 Set 数据结构不同的是,Array 数组的健名是从 0 开始的有序整数。也称为索引。
let set = new Set([‘red‘, ‘green‘, ‘blue‘]);
for (let item of set.keys()) {
console.log(item);
}
// red
// green
// blue
let set = new Set([‘red‘, ‘green‘, ‘blue‘]);
for (let item of set.values()) {
console.log(item);
}
// red
// green
// blue
let set = new Set([‘red‘, ‘green‘, ‘blue‘]);
for (let item of set.entries()) {
console.log(item);
}
// Array [ "red", "red" ]
// Array [ "green", "green" ]
// Array [ "blue", "blue" ]
Array.from() 方法可以将 Set 数据结转为数组。
const setItems = new Set([1, 2, 3, 4, 5]);
const arrayItems = Array.from(setItems);
console.log(setItems); // Set(5) [ 1, 2, 3, 4, 5 ]
console.log(arrayItems); // Array(5) [ 1, 2, 3, 4, 5 ]
因为 Set 可迭代,也即 Set 具有 Iterator 接口。所以使用扩展运算符 ... 也可以将 Set 数据结构转换成 Array。
const setItems = new Set([1, 2, 3, 4, 5]);
const arrayItems = [...setItems];
console.log(setItems); // Set(5) [ 1, 2, 3, 4, 5 ]
console.log(arrayItems); // Array(5) [ 1, 2, 3, 4, 5 ]
Set 构造函数可以接受一个数组作为参数,用来初始化。实现 Array 转 Set。
const srrayItems = [‘hello‘, ‘world‘];
const setItems = new Set(srrayItems);
console.log(srrayItems); // Array [ "hello", "world" ]
console.log(setItems); // Set [ "hello", "world" ]
因为 Set 数据结构无法添加重复的元素,所以 Set 构造函数很适合用来去除数组中重复的的元素。
[...new Set([1, 2, 3, 3, 2])]; // Array [ 1, 2, 3 ]
同理,字符串可以用类似的方法去重。
[...new Set(‘ababbc‘)].join(‘‘); // "abc"
Array.from(new Set([1, 2, 3, 3, 2])); // Array [ 1, 2, 3 ]
原文:https://www.cnblogs.com/xinjie-just/p/12637891.html