Set源码详细解析

博客聚焦于Set源码,对其进行了详细解析,有助于读者深入了解Set在信息技术领域的实现原理和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set源码及其详细解析



class MySet {
    constructor(iterator = []) {
        //判断传递的参数是否是个可迭代对象
        if (typeof iterator[Symbol.iterator] != "function") {
            throw new TypeError(`您所提供的${iterator}不是可迭代对象`)
        }
        this._datas = []  //空数组来接收值
        for (const item of iterator) {
            this.add(item)
        }
    }

    //添加
    add(data) {
        if (!this.has(data)) {
            this._datas.push(data)
        }
    }

    //判断对象里面是否有某个值
    has(data) {
        for (const item of this._datas) {
            if (this.isEqual(data, item)) {
                return true
            }
        }
        return false
    }

    //判断两个值是否相等
    isEqual(data1, data2) {
        if (data1 == 0 && data2 == 0) {  //+0 和 -0 是特例
            return true
        }
        return Object.is(data1, data2)
    }

    //获取对象里面的长度
    get size() {
        return this._datas.length
    }

    //删除
    delete(data) {
        for (let i = 0; i < this._datas.length; i++) {  //遍历对象
            const ele = this._datas[i]
            if (this.isEqual(ele, data)) {   //判断是否有相等的值
                this._datas.splice(i, 1)   //删除值
                return true
            }
        }
        return false
    }

    //清除
    clear() {
        this._datas.length = 0;
    }

    //遍历对象
    forEach(callback) {
        for (let item of this._datas) {
            callback(item, item, this)
        }
    }

    //使这个对象有迭代对象的方法next()
    *[Symbol.iterator]() {
        for (const item of this._datas) {
            yield item;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值