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] 柯里化

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...