JavaScript如何根据子对象value查找对应父级对象的key
问题原因
你现有的getKeyByValue函数仅对传入对象的第一层属性值做相等判断,而你示例中的mainObject第一层属性值均为嵌套的子对象,不可能和字符串类型的目标值value4相等,因此调用后返回undefined。
适配当前两层结构的实现方案
如果你的对象结构固定为只有两层嵌套,可以直接使用如下优化后的函数:
function getParentKeyByValue(object, targetValue) { return Object.keys(object).find(parentKey => Object.values(object[parentKey]).includes(targetValue) ) }
调用测试:
console.log(getParentKeyByValue(mainObject, 'value4')) // 输出 'SECOND'
支持任意层级嵌套的通用方案
如果后续可能出现更深层的对象嵌套,可以使用递归版本适配更多场景:
function getParentKeyByValue(object, targetValue) { for (const key of Object.keys(object)) { const value = object[key] // 跳过null的情况,因为typeof null 也会返回'object' if (typeof value === 'object' && value !== null) { // 当前子对象包含目标值,直接返回父key if (Object.values(value).includes(targetValue)) { return key } // 递归搜索更深层级 const nestedMatch = getParentKeyByValue(value, targetValue) if (nestedMatch) return nestedMatch } } // 无匹配时返回undefined return undefined }
补充说明
如果存在多个父级对象都包含目标value的情况,上述函数会返回第一个匹配到的父key;如果需要返回所有匹配的父key,只需将匹配到的key存入数组,遍历结束后返回数组即可。
内容的提问来源于stack exchange,提问作者Konstantin Torkhov
相关产品推荐
相关产品推荐

