我必须通过JavaScript或jQuery在嵌套的JSON中搜索一个键。在我的JSON对象中,所有的键都是唯一的。我自己尝试了一些解决方案,但它们不起作用。下面是我的代码:
json = {
"app": [{
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit 1": "Mango",
"Green fruit 2": "Guava",
"White Flower 3": "groovy"
},
"Trees": {
"label": {
"Yellow fruit 2": [{"type a":"Pumpkin", "type b": "Banana",..}],
"White Flower 2": ["Bogan 1", "Bogan 2", ...]
}
}],...
}
如何在给定对象中搜索特定键?
如果我传递lookup(json, "type a")
,它应该返回"Pumpkin"
,或者如果我搜索"White Flower 2"
,它应该返回["Bogan 1", "Bogan 2", ...]
以下是我的尝试,它不起作用:
function lookup(obj, k){
for (key in obj){
value = obj[key];
if (k == key) return [k, value];
if (type(value) == "Object"){
var y = lookup(value, k);
if (y && y[0]== k)return y;
}
if(type(value) == "Array"){
for (i in value)
{
var x = lookup(value[i], k);
if (x && x[0]== k)return x;
}
}
console.log(key, value);
return null;
}
}
为了找到对象的类型,我使用以下代码:
function type(object){
var stringConstructor = "test".constructor;
var arrayConstructor = [].constructor;
var objectConstructor = {}.constructor;
if (object === null) {
return "null";
}
else if (object === undefined) {
return "undefined";
}
else if (object.constructor === stringConstructor) {
return "String";
}
else if (object.constructor === arrayConstructor) {
return "Array";
}
else if (object.constructor === objectConstructor) {
return "Object";
}
else {
return "null";
}
}
7条答案
按热度按时间vc6uscn91#
你比你想象的更接近-把
return null;
移出for (key in obj)
是主要的事情;否则,只要对象中的 first 键不匹配,你就放弃了。只有在搜索完所有键后才给予。yvt65v4c2#
wkftcu5l3#
你可以使用下面的代码--
它会返回你所有的匹配,你可以访问像
result[0]
希望这将帮助你。jum4pzuy4#
这是一个递归版本,用ES6编写(但要转换到ES5,您只需将箭头函数替换为普通函数,并将
const
s替换为var
s)。wwtsj6pe5#
不优雅,但有趣和表演!
13z8s7eq6#
编辑:问题是问 plain js 还是 jquery,我的答案使用了不同的库。但是我仍然会把它作为参考,因为它是实际问题的干净解决方案。
原始答案
我们使用object-scan来满足我们所有的数据处理需求。一旦你了解了如何使用它,它就很强大,并且很容易维护代码。下面是你如何回答你的问题
but5z9lq7#
*//你可以用这段代码来获取对象key-value的数组,其中key //和它的值其中Data是一个Json对象,key是你要搜索的Key//
function lookup(obj,k){ let values = [];
public int findDuplicate(int findDuplicate){int findDuplicate [];