gpt4 book ai didi

javascript - 如何使用 JavaScript/Prototype 1.7 递归搜索对象树并根据键/值返回匹配对象

转载 作者:可可西里 更新时间:2023-11-01 01:24:14 25 4
gpt4 key购买 nike

我有一些嵌套的对象数据,我想搜索它并根据 id 返回匹配的对象。

var data = [{id: 0, name: 'Template 0', subComponents:[
{id: 1, name: 'Template 1', subItems:[
{id: 2, name: 'Template 2', subComponents:[{id: 3, name: 'Template 3'}], subItems: [{id: 4, name: 'Template 4'}]}
]}
]}
];

所以我想做这样的事情

getObjectByKeyValue({id: 3}) 

让它返回

{id: 3, name: 'Template 3'}

因为我有子项目和子组件,每个子组件都可以有子项,所以它必须一般地完成。

我使用 Prototype 1.7 尝试过这个,但没有成功——我认为这只是搜索一个数组,而不是一个带有子节点的树:

data.find(function(s){return s.id == 4;})

提前致谢!!!!!!

最佳答案

我走了一条略有不同的路线,将 findKey 方法设为对象原型(prototype):

Object.prototype.findKey = function(keyObj) {
var p, key, val, tRet;
for (p in keyObj) {
if (keyObj.hasOwnProperty(p)) {
key = p;
val = keyObj[p];
}
}

for (p in this) {
if (p == key) {
if (this[p] == val) {
return this;
}
} else if (this[p] instanceof Object) {
if (this.hasOwnProperty(p)) {
tRet = this[p].findKey(keyObj);
if (tRet) { return tRet; }
}
}
}

return false;
};

您可以直接在数据对象上调用,传递您要查找的键/值:

data.findKey({ id: 3 });

请注意,此函数允许您根据任意键查找对象:

data.findKey({ name: 'Template 0' });

See example → (打开控制台查看结果)

关于javascript - 如何使用 JavaScript/Prototype 1.7 递归搜索对象树并根据键/值返回匹配对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com