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);
    

      

     
  • 相关阅读:
    前缀和
    不用加减乘除做加法
    数组中重复的数字
    滑动窗口的最大值
    矩阵中的路径
    Redis 和 Memcached 的区别 Tair
    机器人的运动范围
    汉诺塔问题
    洗牌算法
    斐波那契查找算法(黄金分割查找算法)
  • 原文地址:https://www.cnblogs.com/cx709452428/p/10180807.html
Copyright © 2011-2022 走看看