js 数组的交集、补集、并集
生活随笔
收集整理的這篇文章主要介紹了
js 数组的交集、补集、并集
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
// 交集
const intersection = function (arr1,arr2) {
let mergeArr = arr1 && arr2 && arr1.concat(arr2);
arr1 = arr2Id(arr1);
arr2 = arr2Id(arr2);
let idArr = arr1 && arr1.filter(item=>arr2.includes(item));
return id2Arr(idArr,mergeArr);
}
// 并集
const union = function (arr1,arr2){
let mergeArr = arr1 && arr2 && arr1.concat(arr2);
let _arr1 = arr2Id(arr1);
let _arr2 = arr2Id(arr2);
let idArr = [...new Set(_arr1.concat(_arr2))];
return id2Arr(idArr,mergeArr);
}
// 補(bǔ)集
const complement = function(arr1,arr2){
let mergeArr = arr1 && arr2 && arr1.concat(arr2);
arr1 = arr2Id(arr1);
arr2 = arr2Id(arr2);
let idArr = arr1.filter(item=>!arr2.includes(item));
return id2Arr(idArr,mergeArr);
}
// 提取對(duì)象數(shù)組中的對(duì)象id
const arr2Id = (arr) => {
return arr && arr.map(item=>item.id ? item.id : item);
}
// 通過(guò)id數(shù)組來(lái)還原對(duì)象數(shù)組
const id2Arr = (idArr, arr) => {
return idArr && idArr.map(id=>{
let curr = id;
arr && arr.forEach(item => item.id===id && (curr=item));
return curr;
})
}
/**
* ============測(cè)試================
*/
/**
* 情形1:
// 基本數(shù)據(jù)類型數(shù)組
*/
const arr1=[1,2,3,5,6];
const arr2=[1,2,6,7,8];
/**
* 情形2:
* 對(duì)象類型數(shù)組
*/
const objArr1=[
{id:'001',name:'zhangsan'},
{id:'002',name:'tom'},
{id:'003',name:'jack'},
{id:'004',name:'fei'},
{id:'005',name:'ming'}
];
const objArr2=[
{id:'003',name:'jack'},
{id:'005',name:'ming'},
{id:'007',name:'hello'},
{id:'008',name:'milk'},
];
/**
* 情形3:
* 基本類型和對(duì)象雜糅
*/
const multiArr1=[
{id:'001',name:'zhangsan'},
{id:'002',name:'tom'},
{id:'003',name:'jack'},
true,
{id:'005',name:'ming'}
];
const multiArr2=[
{id:'003',name:'jack'},
{id:'005',name:'ming'},
true,
{id:'008',name:'milk'},
];
console.log('交集:',intersection(multiArr1,multiArr2));
console.log('并集:',union(objArr1,objArr2));
console.log('補(bǔ)集:',complement(arr1,arr2));
總結(jié)
以上是生活随笔為你收集整理的js 数组的交集、补集、并集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ODS(Operational Data
- 下一篇: 什么是BI?