使用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}