JavaScript数组中移除start与end属性反向匹配对象的实现方案
实现方案
核心思路
- 遍历数组时为每个对象的
start和end生成统一唯一标识:将两个属性值按字典序排序后拼接,正反向配对会生成完全相同的标识 - 借助
reduce的累加器同时存储已出现的标识集合、以及符合要求的结果数组 - 每次遍历时判断当前配对的标识是否已存在,不存在则存入结果数组同时记录标识,已存在则直接跳过
代码实现
const arr = [ { start: 'Nebraska', end: 'Kentucky' }, { start: 'Montana', end: 'New York' }, { start: 'Wyoming', end: 'California' }, { start: 'California', end: 'Wyoming' }, { start: 'New Hampshire', end: 'Ohio' }, ] const filteredArr = arr.reduce((acc, item) => { // 生成统一标识,正反向配对标识相同 const pairKey = [item.start, item.end].sort().join('_'); if (!acc.existedPairs.has(pairKey)) { acc.existedPairs.add(pairKey); acc.result.push(item); } return acc; }, { existedPairs: new Set(), result: [] }).result;
输出结果
打印filteredArr可得到符合要求的数组:
[ { start: 'Nebraska', end: 'Kentucky' }, { start: 'Montana', end: 'New York' }, { start: 'Wyoming', end: 'California' }, { start: 'New Hampshire', end: 'Ohio' } ]
注意事项
如果start或end的取值可能包含你选用的分隔符,可以改用JSON.stringify生成唯一键,避免键冲突:
const pairKey = JSON.stringify([item.start, item.end].sort());
内容的提问来源于stack exchange,提问作者Clay Banks
相关产品推荐
相关产品推荐

