js求對象數組的交集/並集/差集/去重

 

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);
  1. 求並集
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);
  1. 求差集
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);
  1. 去重
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;
}, []);

實際組件中應用去重

方法1:

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'})
}

方法2:
(必須先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);
  •  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章