JS在封装对象中查找键值对
JS find key value pair in encapsulated object
我有一个大问题,需要你的帮助。
我有一个这样的对象:
{
folder1: {
folderid: 1,
files: {
name: "yeah.txt"
},
folder2: {
folderid: 2
folder3: {
folderid: 3
}
}
},
folder4: {
folderid: 4
}
}
我想搜索关键字"folderid=3"并找到对象。
我如何在JavaScript中做到这一点?
亲切的问候和感谢您的帮助
我找到了一个更通用的解决方案,它支持多个属性检查:
function search(obj, properties){
if(Object.keys(properties).every(function(key){
return obj[key] === properties[key];
})) {
return obj;
} else {
Object.keys(obj).forEach(function(key){
var child = obj[key];
if(child !== null && typeof child === 'object'){
return search(child, properties);
}
});
return false;
}
}
演示:http://jsfiddle.net/dzs1orbw/
您可以使用DSF算法来执行此操作:http://jsfiddle.net/L5b07bt6/
var obj = {
folder1: {
folderid: 1,
files: {
name: "yeah.txt"
},
folder2: {
folderid: 2,
folder3: {
folderid: 3,
caption: "I got it!"
}
}
},
folder4: {
folderid: 4
}
};
function find(root, id) {
if (root.folderid == id) return root;
if (typeof root !== 'object') return null;
var key, val;
for (key in root) {
val = find(root[key], id);
if (val != null) return val;
}
return null;
}
var result = find(obj, 3);
if (!result) alert("Not found!");
else alert("Found: " + result.caption);
这里是另一个:
function findByKey (object, searchKey){
if(typeof object !== 'object'){
return false;
}
for(var key in object){
if(object[key] === searchKey){
return object;
} else {
if(typeof (object[key] === 'object')){
var result = findByKey(object[key], searchKey);
if(result){
return result;
}
}
}
}
}
http://jsfiddle.net/mattposch/ebmd8xtk/
相关文章:
- 正在数组中存储键值对
- 如何将新的键/值对元素添加到现有数组
- 在键值对中对求和值进行下划线
- 返回由键/值对定义的数组
- 在url参数javascript中存储键值对列表
- 将数组转换为键值对
- jQueryAJAX-将额外的键/值对推送到序列化的$_POST数组中
- 使用jQuery从ajax调用访问键值对
- JS在封装对象中查找键值对
- 如何通过在JavaScript对象中的多个键/值对中查找最小值来选择键/值配对
- Javascript:遍历对象数组以查找键值对并将它们呈现在表中 td
- Javascript/Jquery:在嵌套数组中查找具有键值对的第一个和最后一个数组的索引的最有效方法
- 将外部json查找中的值映射到数组中,作为新的键/值对
- 如何在对象中查找特定键的键/值对
- 为每个元素查找data()键值对
- 查找具有特定键值对的JS对象/散列
- 使用多个键/值对查找JSON对象,然后更新该对象的其他属性
- 快速搜索对象数组以查找匹配的键/值对
- 在JavaScript对象中查找哪个键值对等于X
- 使用函数参数查找和对象键值对