reduce高级用法

5 篇文章 0 订阅
3 篇文章 0 订阅

这个方法接收两个参数:

        要执行的函数,要执行的函数中也可传入参数,分别为

                prev:上次调用函数的返回值

                cur:当前元素

                index:当前元素索引

                arr:被遍历的数组

                函数迭代的初始值

用法:

 ①、计算数组中每个元素出现的次数 

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1 
  }
  return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

②、数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

③、二维转一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

 ④、对象里属性求和

var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum) //60

 ⑤、js 合并数组对象中的相同项,并统计数量和

let list=[
  {
    id:11,
    name:'apple',
    num:2
  },
   {
    id:11,
    name:'apple',
    num:3
  },
   {
    id:22,
    name:'pig',
    num:2
  },
   {
    id:11,
    name:'apple',
    num:2
  },
]
 
list = list.reduce((obj, item) => {  
  let find = obj.find(i => i.id === item.id)  
 let _d = {  
    ...item,  
    frequency: 1  
  }  
  find ? (find.num+=item.num,find.frequency++ ): obj.push(_d)  
  return obj  
}, [])

 

 

 未来路还长,幸好路还长

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS的reduce方法是一个非常强大的函数,它可以用于高级数组操作,包括过滤、映射、归约等。以下是reduce的一些高级用法: 1. 传递一个初始值 可以通过在reduce方法中传递一个初始值来指定归约过程的初始值。这个初始值将作为回调函数的第一个参数被传递。例如: ```javascript const arr = [1, 2, 3, 4, 5]; const sum = arr.reduce((acc, curr) => acc + curr, 0); console.log(sum); // 15 ``` 在这个例子中,`reduce`方法的第二个参数为0,表示归约过程的初始值为0。 2. 将对象数组转换为对象 可以使用reduce方法将一个对象数组转换为一个对象。例如: ```javascript const arr = [ { name: "Alice", age: 25 }, { name: "Bob", age: 30 }, { name: "Charlie", age: 35 }, ]; const obj = arr.reduce((acc, curr) => { acc[curr.name] = curr.age; return acc; }, {}); console.log(obj); // { Alice: 25, Bob: 30, Charlie: 35 } ``` 在这个例子中,我们将对象数组转换为一个以name为key、以age为value的对象。 3. 使用reduce进行分组 可以使用reduce方法对数组进行分组。例如: ```javascript const arr = ['apple', 'banana', 'cherry', 'date', 'eggplant']; const groups = arr.reduce((acc, curr) => { const firstLetter = curr[0]; if (!acc[firstLetter]) { acc[firstLetter] = []; } acc[firstLetter].push(curr); return acc; }, {}); console.log(groups); // { a: ["apple"], b: ["banana"], c: ["cherry"], d: ["date"], e: ["eggplant"] } ``` 在这个例子中,我们将字符串数组分组为以首字母为key、以字符串数组为value的对象。 4. 使用reduce实现快速去重 可以使用reduce方法实现快速去重。例如: ```javascript const arr = [1, 2, 3, 3, 4, 4, 5]; const unique = arr.reduce((acc, curr) => { if (!acc.includes(curr)) { acc.push(curr); } return acc; }, []); console.log(unique); // [1, 2, 3, 4, 5] ``` 在这个例子中,我们使用reduce方法实现了快速去重。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值