如何按条件去除数组对象重复项:同size保留含sku的对象
按规则去重JavaScript数组对象
原始数组
const data = [ {size: '36 ⅔', sku: '11'}, {size: '36 ⅔', sku: null}, {size: '44', sku: null}, {size: '45', sku: '112'}, ];
期望结果
const filteredData = [ {size: '36 ⅔', sku: '11'}, {size: '44', sku: null}, {size: '45', sku: '112'}, ];
解决方案
可以使用reduce结合对象分组实现,完全匹配你的需求:
const filteredData = Object.values(data.reduce((acc, item) => { // 若当前size未记录,或已记录对象的sku为null且当前对象有sku,则更新记录 if (!acc[item.size] || (acc[item.size].sku === null && item.sku !== null)) { acc[item.size] = item; } return acc; }, {}));
逻辑说明
- 用
reduce遍历数组,维护一个以size为键的累加器对象,存储每个size对应的目标对象。 - 遍历过程中:
- 若当前
size未被记录,直接存入累加器。 - 若该
size已存在,但已存对象的sku为null、当前对象sku不为null,则用当前对象替换已存项(符合保留含sku对象的规则)。
- 若当前
- 最后通过
Object.values()提取累加器中的值,得到去重后的数组。
内容的提问来源于stack exchange,提问作者Dang Khoa Duong
相关产品推荐
相关产品推荐

