如何组合使用.map与.filter实现对象数组的筛选及去重操作
map + filter 实现对象数组筛选及去重的方案
你当前的代码已经是map与filter组合实现需求的标准写法,核心逻辑拆解如下:
- 用
map完成字段筛选:遍历原对象数组,提取每个元素里的city对象,得到仅包含城市信息的中间数组 - 用
filter完成去重:通过判断当前元素索引是否等于数组中第一个同id城市的索引,过滤掉id重复的城市对象,最终得到无重复的结果
如果不想声明多余的中间变量,可以直接写成链式调用,代码更简洁:
const arrayOne = [ { id: 1, name: "João", city: { id: 1, name: "Rio de Janeiro" } }, { id: 1, name: "Pedro", city: { id: 2, name: "Salvador" } }, { id: 1, name: "Tiago", city: { id: 1, name: "Rio de Janeiro" } } ]; const uniqueCities = arrayOne .map(item => item.city) .filter((elem, index, arr) => index === arr.findIndex(t => t.id === elem.id));
该方案适用于中小数据量的业务场景,最终得到的uniqueCities就是无重复的城市对象数组。
内容的提问来源于stack exchange,提问作者Cleiton Freitas
相关产品推荐
相关产品推荐

