JavaScript数据结构与算法——集合Set

JavaScript中的集合 数据结构——Set

ES6提供了新的数据结构Set,它类似数组,不同的是集合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 5 4

Set集合的属性和方法
属性
1.构造函数,可以通过new实例化一个Set集合

const set = new Set();

2.获取集合的成员总数

set.size

方法
add(value) // 添加某个值,返回 Set 结构本身
delete(value) // 删除某个值,返回一个布尔值,表示删除是否成功
has(value) // 返回一个布尔值,表示该值是否为Set的成员
clear() // 清除Set集合所有元素,无返回值

判断对象的长度,如果使用for...in... 语句遍历对象的属性时,会包括遍历对象从原型Object继承的属性,所以还要使用hasOwnProperty 方法验证对象是否具有该属性。所有JavaScript对象都有hasOwnProperty方法。这个方法返回一个表明对象是否具有特定属性的布尔值。

数据结构Set

集合使用对象而不是数组来表示。JavaScript对象的键值不允许重复,这就保证了集合元素的唯一,不会重复。

为集合创建以下方法:
has(value):如果值在集合中,返回true,否则返回false。

add(value):向集合添加一个新的项。

remove(value):从集合移除一个值。

clear():移除集合中的所有项。

size():返回集合所包含元素的数量。与数组的length属性类似。

values():返回一个包含集合中所有值的数组。

function Set() {
    var items = {};
    /* this.has = function(value) {
        return value in items;
    }; */

    this.has = function(value) {
        return items.hasOwnProperty(value);
    };

    this.add = function(value) {
        if (!this.has(value)) {
            items[value] = value;
            return true;
        }
        return false;
    };

    this.remove = function(value) {
        if (this.has(value)) {
            delete items[value];
            return true;
        }
        return false;
    };

    this.clear = function() {
        items = {};
    };

    /* this.size = function() {
        return Object.keys(items).length;
    }; */
    this.size = function() {
        var count = 0;
        for (var props in items) {
            if (items.hasOwnProperty(props)) ++count;
        }
        return count;
    };

    /* this.values = function() {
        return Object.keys(items);
    }; */
    this.values = function() {
        var values = [];
        for (var props in items) values.push(props);
        return values;
    };
}   

使用Set

var set = new Set();
set.add(1);
console.log(set.size());  // 1
console.log(set.has(1));  // true
console.log(set.values());  // ['1']

set.add(2);
console.log(set.size());  // 2
console.log(set.has(2));  // true
console.log(set.values());  // ['1', '2']

set.remove(1);
console.log(set.has(1));  // false
console.log(set.values());  // ['2']
set.remove(2);
console.log(set.values());  // []

猜你喜欢

转载自blog.csdn.net/Phoebe_16/article/details/80774713