深度搜索是javascript中的对象



我试图在JavaScript中搜索对象中的任何对key:值,并返回它所属的子对象。

到目前为止,我所做的没有像预期的那样返回我的对象,我不知道为什么。

function searchSheet(obj, keyName, valName) {
let found
for (prop in obj) {
if (typeof obj[prop] == "object") {
searchSheet(obj[prop], keyName, valName);
} else {
if (prop === keyName && obj[prop] === valName) {
found = obj
console.log(found);
// found is logged correctly here
return found
// …but nothing is returned here
}
}
}
}
let sheet = {
"config": {},
"patterns": {
"id": 0,
"type": "pattern",
"startTime": 1652193369859,
"synth": "tic",
"keys": [{
"id": 1,
"type": "key",
"keyCode": 73,
"startTime": 1652193369960,
"note": 730,
"offset": "12.1"
},
{
"id": 2,
"type": "key",
"keyCode": 82,
"startTime": 1652193370371,
"note": 820,
"offset": "61.2"
}
],
"endTime": 1652193370695,
"duration": 836,
"loop": 35
}
}
console.log(
searchSheet(sheet, "keyCode", 82) // undefined
)

Ian Brindley的评论部分正确。您正在丢弃递归调用的返回值。你可以通过修改

来修复你的代码
if (typeof obj[prop] == "object") {
searchSheet(obj[prop], keyName, valName);
} else { //...

if (typeof obj[prop] == "object") {
let objectFound = searchSheet(obj[prop], keyName, valName);
if (objectFound !== undefined) return objectFound
} else { //...

还有其他方法,特别是使用嵌套的帮助函数的方法。

最新更新