>  기사  >  웹 프론트엔드  >  ES6의 Set 데이터 구조는 무엇입니까?

ES6의 Set 데이터 구조는 무엇입니까?

一个新手
一个新手원래의
2017-09-09 13:57:551684검색

ES6: Set

Set 이해

ES6은 Set 데이터 구조를 제공합니다. 배열과 유사하지만 중복된 값이 없습니다.

  • Set 자체는 Set 데이터 구조를 생성하는 데 사용되는 생성자입니다.

const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));for(let i of s ) {    console.log(i); //2 3 4 5 }
  • Set은 초기화를 위한 매개변수로 배열(또는 배열과 유사한 객체)을 허용할 수 있습니다.

var set = new Set([1, 2, 3, 4, 4]);
[...set]; // [1, 2, 3, 4]

은 다음 용도로 사용할 수 있습니다. 배열 중복 제거[...new Set(array)][...new Set(array)]

Array.from()方法可以将Set结构转换为数组Array.from(new Set(array))

  • 向Set加入值时,不会发生类型转换(类似于精确相等===),但是要注意在Set里NaN是等于自身的。另外两个对象总是不相等的。

let set = new Set();let a = NaN;let b = NaN;
set.add(a);
set.add(b);
set; //{NaN} 只能加入一个,说明Set内部两个NaN是相等的

Set实例的属性和方法

  • 属性:

    • Set.prototype.constructor:构造函数,默认就是Set函数

    • Set.prototype.size:返回实例的成员总数

  • 操作方法(方法的具体实现见:我对JS集合的简单学习):

    • add(value):添加一个值,返回Set结构本身

    • delete(value):删除某个值,返回布尔值

    • has(value):返回布尔值,表示是否是成员

    • clear()

      Array.from() 메소드는 Set 구조를 배열Array.from(new) Set(array))

      🎜🎜🎜Set에 값을 추가할 때 유형 변환은 발생하지 않습니다(정확한 동일성 ===와 유사). 그러나 NaN은 그 자체와 동일하다는 점에 유의하세요. 세트. 다른 두 개체는 항상 동일하지 않습니다. 🎜🎜🎜
      s.add(1).add(2).add(2); //链式写法s.size(); //2s.has(3); //falses.delete(2);
      s.has(2); //false
      🎜인스턴스 속성 및 메서드 설정 🎜🎜🎜🎜속성: 🎜🎜
        🎜🎜Set.prototype.constructor: 생성자, 기본값은 Set function🎜🎜🎜🎜Set.prototype.size 총 구성원 수 🎜🎜🎜🎜🎜작업 방법(방법의 구체적인 구현은 JS 컬렉션에 대한 간단한 연구 참조): 🎜🎜
          🎜🎜add(value): 값을 추가하고 Set 구조 자체를 반환합니다🎜🎜🎜🎜delete(value ): 값을 삭제하고 부울 값을 반환합니다🎜🎜🎜🎜has(value): 여부를 ​​나타내는 부울 값을 반환합니다. 회원입니다🎜🎜🎜🎜 clear(): 모든 멤버 지우기, 반환 값 없음🎜
s.add(1).add(2).add(2); //链式写法s.size(); //2s.has(3); //falses.delete(2);
s.has(2); //false
  • 遍历方法

    • keys():返回键名的遍历器(什么是遍历器?Iterator)

    • values():返回键值的遍历器

    • entries():返回键值对的遍历器

    • forEach():使用回调函数遍历每个成员

这里要注意Set的键名和键值是同一个值,所以key()和values()行为是一致的。

let set = new Set(['red', 'green', 'no']);for(let item of set.keys()) {    console.log(item); //red green no}for(let item of set.values()) {    console.log(item); //red green no}for(let item of set.entries()) {    console.log(item); //['red': 'red'] ['green': 'green'] ['no': 'no']}//对每个成员执行某种操作,参数依次为键值、键名、集合本身new Set([1, 2, 3]).forEach((value, key) => console.log(value * 2)); //2 4 6

操作集合

let a = new Set([1, 2, 3]);let b = new Set([4, 3, 2]);//并集let union = new Set([...a, ...b]); //{1, 2, 3, 4}//交集let intersect = new Set([...a].filter(x => b.has(x))); //{2, 3}//差集let difference = new Set([...a].filter(x => !b.has(x))); //{1}

号外:扩展运算符(...)内部使用for...of循环,所以应该知道for of是干嘛的吧

数组的map()filter()可用于Set

let set = new Set([1, 2, 3]);set = new Set([...set].map(x => x * 2)); //set: {2, 4, 6}let set = new Set([1, 2, 3, 4, 5]);set = new Set([...set].filter(x => (x % 2) == 0)); //set {2, 4}

위 내용은 ES6의 Set 데이터 구조는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.