微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript pushOnly( ) 数组添加非重复元素或删除重复的元素

原型链

0){
            for(let i=0;ietownPropertyDescriptor(this[i],key).value===Object.getownPropertyDescriptor(data,key).value){
                    bool&&this.splice(i,1);
                    return this;
                }
            }
            this.push(data);
            return this;
        }else {
            if(this.length===0||this.indexOf(data)===-1){
                this.push(data);
                return this;
            }else {
                bool&&this.splice(this.indexOf(data),1);
            }
        }
    }

使用说明

arr.pushOnly(data,bool)
删除,认为false,非必填 摘自

柯里化

0){
                    for(let i=0;i

使用说明

arr.pushOnly(data)(key)(bool)

函数式编程

    class pushOnly{
        constructor(_val){
            this._val=_val
        }
    //函子
    map(data){
        return new pushOnly(data)
    }

    val(){
        return this._val
    }

    push(data){
        const newArr = [...this._val];
        // 传值赋值,防止修改系统变量
        newArr.push(data);
        return this.map(newArr)
    }

    Set(key){
        const newArr = [];//新数组
        if(key){
            for(let i=0;i<this._val.length;i++){
                let flag = true;
                for(let j=0;j<newArr.length;j++){
                    if(this._val[i][key] === newArr[j][key]){
                        flag = false
                    }
                }
                if(flag){
                    newArr.push(this._val[i])
                }
            }
            return this.map(newArr)
        }else {
            return this.map([...new Set(this._val)])
        }
    }
}
//of方法
pushOnly.of = function(_val) {
    return new pushOnly(_val)
};</code></pre>

使用说明

pushOnly.of(arr).push(data).val()
pushOnly.of(arr).push(data).Set(key).val()

回调函数

使用说明

arr.push(data).set(key,callback)

状态模式

新需求说明

一次添加多个对象,只接收原数组中不存在的对象,存在的对象无法添加

参考

  • [1] 柯里化

原文地址:https://www.jb51.cc/js/415514.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐