在Javascript中,给定值,查找值并过滤来自Object literal的特定值

时间:2013-12-02 21:12:04

标签: javascript jquery object object-literal

我应该注意到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 ++的孩子(这将是人们的名字)。 [/编辑]

提前感谢您的帮助。

1 个答案:

答案 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);}));
}