You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:24:01