在Javascript中,给定值,从Object文本中查找值并过滤特定值

In Javascript, given value, find value and filter on the specific value from Object literal

本文关键字:查找 文本 过滤 Javascript Object      更新时间:2024-02-20

我应该注意,我不是Javascript/ajax/jquery的最佳用户。无论如何,在检查对象时,我需要一些帮助,看看它是否包含基于对象文字的特定值。我正在为一个项目使用JavaScriptInfoVisToolkit。我使用的库可视化不是使用真正的json对象,而是更多的JavaScript对象文本。我很难判断我的对象中是否存在项目。

在对代码进行更改后,我尝试了提供的最佳答案,但是,它似乎无法正常工作。

我也试过。。在循环中,我知道这是令人不快的(加上我也没有像预期的那样让它工作)

以下是对象及其结构:

 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"
        }]
    }]
};

[编辑]在这个例子中,我试图找到"亚历克斯",但我所尝试的一切都失败了。我需要它来查看整个结构,所以我不能有硬编码的选择(myObj.children[0].name….)

我的项目的最终目标是能够搜索具有特定技能的用户。例如:

我想搜索C++的技能集,然后显示C++的所有子项(即人名)。[/EDIT]

提前感谢您的帮助。

澄清后,这里有一种递归的方法来检查:

以下是一个小型实现

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