我有一个像这样的对象: 只是举例而已。...
{a:"aaaa",
b:{
b1:"1b1b1b",
b2:"2bb22b",
b3:{
mykey:"value to find",
some:"same",
},
},
}
我知道键“ mykey”,但是我不知道它在哪里,我也不知道路径... 我不能用这种方式来找到价值...
myObj.a.b.maykey
因为我不知道钥匙“ mykey”在哪里 我只知道我的钥匙里有这个钥匙
我必须找到“找到的价值”, 如何找到myKey的值?
谢谢
答案 0 :(得分:1)
假设您知道密钥是myKey
,并且您正在对象图中某个地方寻找它,一个选择是使用深度优先遍历递归函数(类似于DOM用于{{ 1}})。这比顾名思义要简单得多。 :-)查看评论:
querySelector
如果找不到,则返回function findFirstValue(data, key) {
// ASSERTION: data is an object
// Loop through the properties of the object
for (const [name, value] of Object.entries(data)) {
// Found the key?
if (name === key) {
// Return the value
return value;
}
// If the value is an object, recurse
if (typeof value === "object") {
const found = findFirstValue(value, key);
if (found !== undefined) {
// Found during recursion
return found;
}
}
}
// Not found
return undefined; // Explicit, but this is effectively what would happen anyway
}
const found = findFirstValue({
a: "aaaa",
b: {
b1: "1b1b1b",
b2: "2bb22b",
b3: {
mykey: "value",
some: "same",
},
},
}, "mykey");
console.log(found);
。您可以改用标志值(这样,如果找到了键,但实际上值是undefined
,则可以分辨出该值)。这是对上面的细微调整。但是,如果您可以假设该值实际上不是undefined
,则undefined
会成为一个很好的标志值。
答案 1 :(得分:1)
您可以通过递归来实现。
let obj = {a:"aaaa",
b:{
b1:"1b1b1b",
b2:"2bb22b",
b3:{
mykey:"value",
some:"same",
},
},
}
function find(obj,givenKey){
for(let key in obj){
//checks if key's value is object
if(typeof obj[key] === "object"){
//find 'givenKey' inside that object
let keyValue = find(obj[key],givenKey)
//if 'givenKey' is found in that object
if(keyValue){
//return that key's value
return keyValue
}
}
//if key's value is not object
else{
//if key match given key then it return the value of key
if(key === givenKey) return obj[key]
}
}
}
console.log(find(obj,'mykey'))