javascript - 获取嵌套对象内项目的绝对键
问题描述
所以我有一个对象,说
var obj = {
flowers: {
rose: 'red',
sunflower: 'yellow',
},
vegetables: { ... }
}
无论如何要让红色的关键路径返回为 obj['flowers']['rose'] ?(在我的实际对象中不可能有重复的值或键,所以不会有问题)
我曾尝试使用 Object.keys,但它会输出所有内容,因为它没有放置特定值的选项。
尝试使用 for 循环,但如果嵌套只是在单层,它会起作用。
我也尝试寻找类似的问题,但无法从中找出任何东西。请放一些光。
解决方案
使用迭代键和值的递归函数。找到值后,返回键。当找到子对象时,递归调用该函数,如果递归调用给出结果,则返回它:
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'));
推荐阅读
- c++ - 如何测量 std::fstream 上的剩余字节?
- python - Django 迁移不会更改 AWS Elastic Beanstalk 中的数据库
- c# - 在 C# 中使用 [Datamember] 有什么意义?
- swift - Swift - 一个计算给定百分比的概率的函数
- flutter - 未处理的异常:键入“列表”
' 不是类型 'Map 的子类型 '颤动 - node.js - Nestjs 无法解决我的依赖关系,即使它在模块上下文中可用
- mysql - 根据其他行值连接和连接行
- r - 根据 dbplyr 中的列值创建数组
- javascript - 从另一个类调用函数时属性未定义
- python - Selenium 找不到元素/表,即使它在屏幕上