如何在对象中提取值相同的键(键异值同场景)
实现方法
先看你给出的目标对象:
const object = { "A":["1","choiceONE"], "B":["1","choiceTHREE"], "C":["1","choiceONE"], "D":["1","choiceONE"], "E":["1","choiceTWO"], "F":["4","choiceONE"], "G":["4","choiceTHREE"], "H":["4","choiceTHREE"] };
要把值完全相同的键分组,且只保留成员数≥2的分组,可以按以下步骤实现:
- 创建一个临时对象,用来存储每个值对应的键列表
- 遍历原对象的所有键值对,把数组类型的值转成字符串(用
JSON.stringify)作为临时对象的键,将原对象的键添加到对应数组中 - 最后提取临时对象里所有长度≥2的数组,就是目标结果
具体代码:
const groupKeysByValue = (obj) => { const groups = {}; // 遍历原对象的键值对 for (const [key, value] of Object.entries(obj)) { // 把数组转成唯一字符串作为分组标识 const valueKey = JSON.stringify(value); // 初始化分组或追加当前键 groups[valueKey] = groups[valueKey] ? [...groups[valueKey], key] : [key]; } // 过滤出成员数≥2的分组 return Object.values(groups).filter(group => group.length >= 2); }; // 调用函数获取结果 console.log(groupKeysByValue(object)); // 输出:[["A","C","D"], ["G","H"]]
补充说明
数组属于引用类型,直接作为对象键会被统一转成[object Array],无法区分不同数组,所以必须用JSON.stringify把数组转成唯一字符串,确保相同数组能分到同一组;最后过滤掉仅含单个键的分组,就得到你需要的结果。
内容的提问来源于stack exchange,提问作者Stuart L
相关产品推荐
相关产品推荐

