如何在JavaScript中移除对象数组中的重复键值对?
移除数组对象中重复键值对的实现方法
给定如下数组:
const arr1 = [ { "Param1": "20", "Param2": "8", "Param3": "11", "Param4": "4", "Param5": "18", "Param6": "20", "Param7": "8" }, { "Param6": "21", "Param7": "8", "Param8": "11", "Param9": "4", "Param10": "18" }, { "Param1": "20", "Param2": "8", "Param3": "10" } ]
需要实现的效果是:移除整个数组中键和值完全相同的键值对,仅保留首次出现的实例,最终得到如下结果:
[ { "Param1": "20", "Param2": "8", "Param3": "11", "Param4": "4", "Param5": "18", "Param6": "20", "Param7": "8" }, { "Param6": "21", "Param8": "11", "Param9": "4", "Param10": "18" }, { "Param3": "10" } ]
实现方案
可以用Set来记录已经出现过的键值对组合,遍历数组时过滤掉重复的键值对,具体代码如下:
const arr1 = [ { "Param1": "20", "Param2": "8", "Param3": "11", "Param4": "4", "Param5": "18", "Param6": "20", "Param7": "8" }, { "Param6": "21", "Param7": "8", "Param8": "11", "Param9": "4", "Param10": "18" }, { "Param1": "20", "Param2": "8", "Param3": "10" } ]; // 用Set存储已出现的键值对,格式为"键:值"作为唯一标识 const seenPairs = new Set(); const uniqueArr = arr1.map(obj => { const filteredObj = {}; // 遍历当前对象的所有键值对 for (const [key, value] of Object.entries(obj)) { const pairKey = `${key}:${value}`; // 如果这个键值对没出现过,就保留并记录 if (!seenPairs.has(pairKey)) { filteredObj[key] = value; seenPairs.add(pairKey); } } return filteredObj; }); console.log(uniqueArr);
逻辑说明
- 初始化
seenPairs集合,用来存储已经处理过的键值对组合,用键:值的字符串形式作为唯一标识,确保不会重复。 - 遍历原数组中的每个对象,对每个对象的键值对逐一检查:
- 若当前键值对组合不在
seenPairs中,就将其加入新对象filteredObj,并把组合存入seenPairs。 - 若已经存在,则跳过该键值对。
- 若当前键值对组合不在
- 最终返回的
uniqueArr就是处理后的结果,完全符合需求。
内容的提问来源于stack exchange,提问作者svs
相关产品推荐
相关产品推荐

