reduce替代map与filter的组合

3,021 阅读1分钟

使用reduce代替map和filter的组合

1.用map和filter的组合(遍历数组2次)

 const list=[
    {
        name:'张三',
        age:12,
        flag:false
    },{
        name:'李四',
        age:13,
        flag:true
    },{
        name:'王五',
        age:15,
        flag:true
    }
 ];
 const newList = list.filter(item=>item.flag).map(item=>{
    return Object.assign({},item,{
        is:'可以去玩'
    })
 });
 console.log(newList);
 

结果:

2.用reduce实现(遍历1次)

const list = [
    {
      name: '张三',
      age: 12,
      flag: false,
    }, {
      name: '李四',
      age: 13,
      flag: true,
    }, {
      name: '王五',
      age: 15,
      flag: true,
    },
  ];
  const newList = list.reduce((memo, item) => {
    return item.flag ? memo.concat(Object.assign({}, item, { is: '可以去玩' })) : memo;
  }, []);
  console.log(newList);
  

结果:

3.通过reduce过滤json

    const mapJson = {
        前端: 1,
        后端: 2,
        ios: 3,
        测试: 4,
        总监: 5,
        经理: 6,
    };

  //只过滤出前端,ios和经理对应的mapjon
  const newMapJson = Object.keys(mapJson).reduce((memo, item) => {
    ['前端', '经理', 'ios'].includes(item) ? memo[item] = mapJson[item] : memo;
    return memo;
  }, {});
  console.log(newMapJson);//{前端: 1, ios: 3, 经理: 6}