我应该注意到Javascript / ajax / jquery不是最好的。无论如何,在检查对象以查看它是否包含基于对象文字的特定值时,我需要一些帮助。我正在使用JavaScript InfoVis Toolkit来处理我正在进行的项目。我正在使用的库可视化不是使用真正的json对象,而是更多的javascript对象文字。我很难看到物品中是否存在物品。
我在更改后尝试了best answer provided以适合我的代码,但是,它似乎无法正常工作。
我也尝试了一个for..in循环,我知道这是不赞成的(加上我没有按预期工作)
这是对象及其结构:
myObj = {
id: "190_0",
name: "Pearl Jam",
children: [{
id: "306208_1",
name: "Pearl Jam & Cypress Hill",
children: [{
id: "84_2",
name: "Cypress Hill",
children: []
},
{
id: "306208_3",
name: "Alex"
}]
}]
};
[编辑] 我试图在这个例子中找到“Alex”,但我尝试过的一切都失败了。我需要它来查看整个结构,所以我不能进行硬编码选择(myObj.children [0] .name ....)
我的项目的最终目标是能够搜索具有特定技能组的用户。例如:
我想搜索技能组C ++,然后显示所有C ++的孩子(这将是人们的名字)。 [/编辑]
提前感谢您的帮助。
答案 0 :(得分:4)
在澄清之后是一种递归方式来检查:
这是一个小实现
function contains(obj,what){
if(obj === what){
return true;
}
if(typeof obj!== "object" || obj === null){
return false;
}
for(var i in obj){
if(contains(obj[i],what)){
return true;
}
}
return false;
}
这适用于所有新旧浏览器,并且没有依赖关系。再次注释:
function contains(obj,what){
if(obj === what){ // if the object is what we're looking for - return it
return true;
}
// if it's not what we're looking for and it's not an object return it
if(typeof obj!== "object" || obj === null){
return false;
}
for(var i in obj){ // check if it's any of its properties
if(contains(obj[i],what)){
return true; // found it in a child
}
}
return false; // did not find it anywhere.
}
此外,强制性的一个班轮:
function contains(obj,what){
return (obj === what)||((typeof obj === "object" && obj !== null) && Object.keys(obj).some(function(el){return contains(obj[el],what);}));
}