zoukankan      html  css  js  c++  java
  • js求对象数组的交集/并集/差集/去重

          1.求交集
        var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; var arr1Id = [1,2,3] var arr2 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3},{name:'name4',id:4},{name:'name5',id:5}]; var result = arr2.filter(function(v){ return arr1Id.indexOf(v.id)!==-1 // 利用filter方法来遍历是否有相同的元素 }) console.log(result);
          2.求并集
        let arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; let arr2 = [{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}]; let arr3 = arr1.concat(arr2); let result = []; var obj = []; result = arr3.reduce(function(prev, cur, index, arr) { console.log(prev, cur); obj[cur.id] ? '' : obj[cur.id] = true && prev.push(cur); return prev; }, []); console.log(result);
        3.求差集
        let arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; let arr1Id = [1,2,3]; let arr2 = [{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}]; let arr2Id = [1,4,5]; let arr3 = arr1.concat(arr2); let result = arr3.filter(function(v){ return arr1Id.indexOf(v.id)===-1 || (arr2Id.indexOf(v.id)===-1) }) console.log(result);

      

          4.去重
        let arr = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3},{name:'name1',id:1},{name:'name4',id:4},{name:'name5',id:5}]; var obj = []; let result = arr.reduce(function(prev, cur, index, arr) { console.log(prev, cur); obj[cur.id] ? '' : obj[cur.id] = true && prev.push(cur); return prev; }, []);

     实际组件中应用去重

     a方法
           let includeThis = false
                let vm = this
                if(vm.informedPersonList.length>0){
                    vm.informedPersonList.forEach(el =>{
                        if(el.id == vm.selectedTrueItem.id){
                            includeThis = true
                        }
                    })
                }
                if(includeThis===false){
                    vm.informedPersonList.push(vm.selectedTrueItem)
                }else{
                    Message({message: '请勿重复添加',type: 'warning'})
                }
     b方法(必须先let informedPersonL = vm.informedPersonList,不能直接使用vm.informedPersonList,否则浏览器控制台会报错)
                vm.informedPersonList.push(this.selectedTrueItem)
                let obj = {};
                let informedPersonL = vm.informedPersonList
                informedPersonL = informedPersonL.reduce((cur,next) => {
                    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
                    return cur;
                },[]) //设置cur默认类型为数组,并且初始值为空的数组
                vm.selectedTrueItem = {}
                vm.$emit("backInformedPList",informedPersonL);
    

      

     
  • 相关阅读:
    NOIP 2011 DAY 2
    NOIP 2011 DAY 1
    扩展欧几里得算法(exgcd)
    中国剩余定理
    线性同余方程的求解
    乘法逆元
    poj 1845 Sumdiv(约数和,乘法逆元)
    欧拉-费马小定理定理(证明及推论)
    求解范围中 gcd(a,b)== prime 的有序对数
    KindEditor解决上传视频不能在手机端显示的问题
  • 原文地址:https://www.cnblogs.com/cx709452428/p/10180807.html
Copyright © 2011-2022 走看看