在嵌套对象中匹配键值对的路径 [英] Path to matching key value pair in a nested object
本文介绍了在嵌套对象中匹配键值对的路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图在嵌套对象中实现搜索。
I was trying to implement a search in a nested object.
// Returns an array of matching objects
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (!$.isNumeric(obj[key]) && i == key && obj[key].toLowerCase().match(val)) {
objects.push(obj);
}
}
return objects;
}
此函数根据提供的键值对返回匹配对象。
This function returns the matching object on basis of key value pair provided.
我想要的是找到键值对的对象的路径。
What I want is the path to the object where key value pair is found.
示例数据
TestObj = {
"Categories": [{
"Product1": [{
"id": "a01",
"name": "Pine",
"description": "Short description of pine."
}, {
"id": "a02",
"name": "Pine",
"description": "Short description of pine."
}, {
"id": "a03",
"name": "Poplar",
"description": "Short description of poplar."
}],
"id": "A",
"title": "Cheap",
"description": "Short description of category A."
}, {
"Product2": [{
"id": "b01",
"name": "Maple",
"description": "Short description of maple."
}, {
"id": "b02",
"name": "Oak",
"description": "Short description of oak."
}, {
"id": "b03",
"name": "Bamboo",
"description": "Short description of bamboo."
}]
}]
};
我试图写一个函数
function objPath(obj, key, val, path) {
var result = [];
var passName = '';
if (path) {
passName = path;
}
var tempArray = [];
for (var prop in obj) {
var value = obj[prop];
if (typeof value === 'object') {
tempArray = objPath(value, key, val, passName);
$.each(tempArray, function (k, value) {
result.push(value);
});
} else if (prop == key && obj[key].toLowerCase().match(val)) {
result.push(obj[key]);
}
}
return result;
}
如果我将函数称为
objPath(TestObj, 'id', 'b03');
哪些应返回类别> <产品2>第三排
但我得到的只是关键。如何修复 objPath
函数以获得所需的结果
But all I'm getting is the key. How to fix the objPath
function to obtain required result
推荐答案
我有写了一个自定义函数
I have wrote a custom function
function objPath(obj, key, val, path) {
var result = [];
var passName = '';
if (path) {
passName = path;
}
var tempArray = [];
for (var prop in obj) {
var value = obj[prop];
if (typeof value === 'object') {
tempArray = objPath(value, key, val, passName);
$.each(tempArray, function (k, value) {
result.push(value);
});
} else if (!$.isNumeric(obj[key]) && prop == key && obj[key].toLowerCase().match(val)) {
result.push(passName + '["' + obj[prop] + '"]');
} else {
if ($.isNumeric(obj[prop])) {
//passName += ' > ' + obj[prop];
} else {
passName += '["' + obj[prop] + '"]';
}
}
}
return result;
}
将返回
["Categories"]["Product2"]["b03"]
这篇关于在嵌套对象中匹配键值对的路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文