如何使用Lodash查找同一对象中数组值忽略顺序的重复属性
实现方案
核心思路是为每个不考虑顺序的数组生成唯一标识,再按标识分组属性名,最后过滤出存在重复的分组即可,和你原本的排序对比思路复杂度一致,但是Lodash实现更简洁易读:
const _ = require('lodash'); const findDuplicatePropGroups = (targetObj) => { return _.chain(targetObj) // 遍历所有属性,生成[属性名, 排序后数组的唯一标识]的映射 .map((arr, propName) => [propName, _.sortBy(arr).join(',')]) // 按唯一标识分组 .groupBy(item => item[1]) // 提取所有分组的属性名 .values() .map(group => _.map(group, item => item[0])) // 过滤仅保留存在重复的分组(成员数≥2) .filter(group => group.length >= 2) .value(); }; // 测试用例 const obj = { c1: ['a', 'b', 'c'], c2: ['a', 'c', 'b'], cx: ['a', 'b'], c3: ['d'], c4: ['d'], c5: ['e'], }; console.log(findDuplicatePropGroups(obj)); // 输出结果:[ [ 'c1', 'c2' ], [ 'c3', 'c4' ] ]
如果你的数组元素是基础类型之外的复杂对象,可以将.join(',')替换为JSON.stringify()即可适配场景。
内容的提问来源于stack exchange,提问作者Drenai
相关产品推荐
相关产品推荐

