作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些嵌套的对象数据,我想搜索它并根据 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/
我是一名优秀的程序员,十分优秀!