首页 > 解决方案 > 获取嵌套对象内项目的绝对键

问题描述

所以我有一个对象,说

 var obj = {
   flowers: { 
            rose: 'red',
            sunflower: 'yellow',
         },

   vegetables: { ... }

 }

无论如何要让红色的关键路径返回为 obj['flowers']['rose'] ?(在我的实际对象中不可能有重复的值或键,所以不会有问题)

我曾尝试使用 Object.keys,但它会输出所有内容,因为它没有放置特定值的选项。

尝试使用 for 循环,但如果嵌套只是在单层,它会起作用。

我也尝试寻找类似的问题,但无法从中找出任何东西。请放一些光。

标签: javascript

解决方案


使用迭代键和值的递归函数。找到值后,返回键。当找到子对象时,递归调用该函数,如果递归调用给出结果,则返回它:

var obj = {
  flowers: {
    rose: 'red',
    sunflower: 'yellow',
  },

  vegetables: {
  }

};

const findPath = (parentObj, valueToFind) => {
  for (const [key, value] of Object.entries(parentObj)) {
    if (value === valueToFind) return '.' + key;
    if (typeof value === 'object' && value !== null) {
      const possibleResult = findPath(value, valueToFind);
      if (possibleResult) return '.' + key + possibleResult;
    }
  }
};
console.log('obj' + findPath(obj, 'red'));


推荐阅读