如何通过一次Map循环从对象数组提取多个扁平化数组
从对象数组一次遍历提取去重的扁平化数组
要实现单次遍历就拆分出type和deal_type的去重数组,使用Array.reduce是最优方案,它能在一次循环内完成数据收集与去重,避免多次遍历的冗余操作。
实现代码
let list = [ { "name": "namee 1", "type": "type 1", "deal_type": "dealtype1" }, { "name": "namee 2", "type": "type 2", "deal_type": "dealtype2" }, { "name": "namee 3", "type": "type 3", "deal_type": "dealtype3" }, { "name": "namee 1", "type": "type 1", "deal_type": "dealtype1" } ]; // 一次遍历完成数据收集与去重 const { types, dealTypes } = list.reduce((acc, item) => { acc.types.add(item.type); acc.dealTypes.add(item.deal_type); return acc; }, { types: new Set(), dealTypes: new Set() }); // 转换为普通数组 const type = Array.from(types); const deal_type = Array.from(dealTypes); console.log(type); // ["type 1", "type 2", "type 3"] console.log(deal_type); // ["dealtype1", "dealtype2", "dealtype3"]
说明
- 借助
reduce的累加器维护两个Set集合,利用Set自动去重的特性过滤重复值 - 遍历过程中把每个对象的
type和deal_type分别加入对应集合,仅需一次循环 - 最后通过
Array.from()将Set转换为普通数组,得到目标格式的结果
内容的提问来源于stack exchange,提问作者ChicagoMG2022
相关产品推荐
相关产品推荐

