JavaScript 标准内置对象 -- Set

Set

Set 对象可以存储任何类型(包含原始值或者是对象引用)的值,是值的集合,值都是唯一的,不可重复,且区分大小写。

内置属性

属性名 描述
size 返回 Set 对象中的值的个数

内置函数

方法名 描述
add 在Set对象尾部添加一个元素。返回该Set对象。
clear 移除Set对象内的所有元素。没有返回值。
delete 移除Set中与这个值相等的元素,返回Set.prototype.has(value)在这个操作前会返回的值(即如果该元素存在,返回true,否则返回false)。
has 返回一个布尔值,表示某个键是否在当前 Set 对象之中。
values 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
keys 与values()方法相同,返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值。
forEach 对每个元素执行指定操作。
entries 返回一个新的迭代器对象,该对象包含Set对象中的按插入顺序排列的所有元素的值的[value, value]数组。为了使这个方法和Map对象保持相似, 每个值的键和值相等。

扩展操作

  • 单数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5];
console.log([...new Set(numbers)]); // [2, 3, 4, 5, 6, 7, 32]
console.log(Array.from(new Set(numbers))); // [2, 3, 4, 5, 6, 7, 32]
  • 单字符串去重
console.log([...new Set('ababbc')].join('')); // 'abc'
  • 数组包含
function isSuperset(set, subset) {
    for (let elem of subset) {
        if (!set.has(elem)) {
            return false;
        }
    }
    return true;
}
//Examples
let setA = new Set([1, 2, 3, 4]),
    setB = new Set([2, 3]);

isSuperset(setA, setB); // true
  • 数组合并去重
function union(setA, setB) {
    let _union = new Set(setA);
    for (let elem of setB) {
        _union.add(elem);
    }
    return _union;
}
//Examples
let setA = new Set([1, 2, 3, 4]),
    setC = new Set([3, 4, 5, 6]);

union(setA, setC);               // Set [1, 2, 3, 4, 5, 6]
  • 数组交集
function intersection(setA, setB) {
    let _intersection = new Set();
    for (let elem of setB) {
        if (setA.has(elem)) {
            _intersection.add(elem);
        }
    }
    return _intersection;
}
//Examples
let setA = new Set([1, 2, 3, 4]),
    setC = new Set([3, 4, 5, 6]);

intersection(setA, setC);        // Set [3, 4]
  • 数组对称差集
function symmetricDifference(setA, setB) {
    let _difference = new Set(setA);
    for (let elem of setB) {
        if (_difference.has(elem)) {
            _difference.delete(elem);
        } else {
            _difference.add(elem);
        }
    }
    return _difference;
}
//Examples
let setA = new Set([1, 2, 3, 4]),
    setC = new Set([3, 4, 5, 6]);

symmetricDifference(setA, setC); // Set [1, 2, 5, 6]
  • 数组差集
function difference(setA, setB) {
    let _difference = new Set(setA);
    for (let elem of setB) {
        _difference.delete(elem);
    }
    return _difference;
}
//Examples
let setA = new Set([1, 2, 3, 4]),
    setB = new Set([2, 3]),
    setC = new Set([3, 4, 5, 6]);
difference(setA, setC);          // Set [1, 2]
posted @ 2022-02-16 13:35  项羽大魔王  阅读(143)  评论(0编辑  收藏  举报