兩個陣列取交集 vs 多個陣列取交集 => js reduce函式的妙用
<script>
// 值集陣列
let arr1 = [1,2]
let arr2 = [2,3]
let newArr1 = arr1.filter(val=>{
return new Set(arr2).has(val)
})
console.log(newArr1) // [2]
// 物件陣列取某個物件元素相同的交集
let arr3 = [{a:'1',b:'12'}, {a:'0', b:'12'}]
let arr4 = [{a:'2',b:'23'}, {a:'0', b:'12'}]
let arr5 = arr3.map(item=>item.a)
let newArr2 = arr4.filter(info=>{
return new Set(arr5).has(info.a)
})
console.log(newArr2) // [{a:'0', b:'12'}]
// 多個陣列取交集-reduce()方法對陣列中的每個元素執行一個由自己提供的函式,將其結果匯總為單個回傳值
let arr6 = [1,2,3]
let arr7 = [3,4,5]
let arr8 = [{a:'2',b:'23'}, {a:'0', b:'12'}, {a:'3', b:'34'}]
// 定義一個取交集的函式
function intersection(getar1, geta2, key) {
let arr = getar1.map(item=>item[key])
let newArr3 = geta2.filter(info=>{
return new Set(arr).has(info[key])
})
return newArr3
}
let getAllObjArr = [arr3,arr4,arr8] // reduce()方法處理處理陣列元素,現將所有的陣列合并在一個陣列中
let getNewArr = getAllObjArr.reduce((a, b)=>{
return intersection(a, b, 'a')
})
console.log(getNewArr) // [{a:'0', b:'12'}]
// reduce函式方法
// reducer 函式的回傳值分配給累計器,該回傳值在陣列的每個迭代中被記住,并最后成為最終的單個結果值,
// MDN上的栗子
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// reducer 函式接收4個引數:
// Accumulator (acc) (累計器)
// Current Value (cur) (當前值)
// Current Index (idx) (當前索引)
// Source Array (src) (源陣列)
</script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/88343.html
標籤:JavaScript
