打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
js 高阶函数reduce ——数组取交集、并集
两个数组取交集 vs 多个数组取交集 => js reduce函数的妙用
1、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>

 2、使用reduce函数取并集即对象数组的去重

const arr1 = [{ name: 'name1', id: 1 }, { name: 'name2', id: 2 }, { name: 'name3', id: 3 }]
      const arr2 = [{ name: 'name1', id: 1 }, { name: 'name4', id: 4 }, { name: 'name5', id: 5 }]
      let arr3 = arr1.concat(arr2)
      let result = []
      let obj = []
      result = arr3.reduce(function (prev, cur) {
        // console.log(prev, cur, index, arr, obj) // index-索引,arr-索引
        obj[cur.id] ? '' : obj[cur.id] = true && prev.push(cur)
        return prev
      }, [])
      console.log(result) //[{ name: 'name1', id: 1 },{ name: 'name2', id: 2 },{ name: 'name3', id: 3 },{ name: 'name4', id: 4 },{ name: 'name5', id: 5 }]

 

  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JS取出两个数组的不同或相同元素
python程序员带你深入解读ES6系列,让你浅显易懂
记一次笔试题
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
20 个超级有用的 JavaScript 技巧,让你的工作更轻松
数组去重
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服