我也在尝试解决这个问题,JSON路径中也包含数组,这是我最终想出的方法:
function findValuePath(obj, value) {
let result = [];
let path = [];
function searchValue(obj, value) {
for (let key in obj) {
if (obj[key] === value) {
path.push((Array.isArray(obj) ? `[${key}]` : `.${key}`));
result = path.slice();
path.pop();
}
else if (typeof obj[key] === 'object') {
path.push((Array.isArray(obj) ? `[${key}]` : `.${key}`));
searchValue(obj[key], value);
path.pop();
}
}
}
searchValue(obj, value);
return result.length > 0 ? result.join('') : '';
}
这是我制作的测试示例:
let obj = {
a:1,
b:"hello",
c:{
a:"target000",
b:"tar",
c:"target_w",
d:[
"target0",
"target1",
"target2",
{
a:2,
b:"target"
}
]
}
}
let res = findValuePath(obj,"target")
console.log(res)
console.log(`obj${res}`)
console.log(eval(`obj${res}`))
data.key1.children.key3 === data.key4
也会是true
,这可能不是您想要实现的。 - Yoshi