【发布时间】:2013-11-26 10:42:37
【问题描述】:
我试图在嵌套对象中实现搜索。
// 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;
}
此函数根据提供的键值对返回匹配对象。
我想要的是找到键值对的对象的路径。
样本数据
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');
应该返回Categories > Product2 > 3rd Row
但我得到的只是钥匙。如何修复objPath函数以获得所需的结果
【问题讨论】:
-
想让我知道为什么是负面的?
-
我本来想问同样的问题(我讨厌不加解释地投反对票——如果有人有问题,乐于助人是我的座右铭)。无论如何,我已经给你 +1 了,因为我认为这是一个公平的问题。
-
我认为这是因为您没有真正解释您的问题是什么,以及没有说明您收到什么输出。
-
您自己尝试过什么吗?该函数究竟应该返回什么,一个字符串?如果它现在返回匹配的对象,它是否应该不再这样做(因为你不能同时返回两个东西)?
-
我的直觉是,作为一个递归函数,你必须在某个地方遇到一些溢出并在返回之前放弃。
标签: javascript jquery