遍历Arrray of Objects中的每个属性

时间:2017-05-26 07:53:03

标签: javascript arrays object filter indexof

我有与此结构类似的对象数组:

array = [
    {name: "Alex", content: "Lorem"},
    {name: "Bob", content: "Lorem"}
    ...
]

此数组映射到html表。我正在尝试构建搜索方法,它会比较对象的每个属性并返回这些属性,其中包含我正在寻找的单词。我已经建立了方法,这是有效的。

if(search_word){
    licenses = licenses.filter((item) => {
        if(item.name.toLowerCase().indexOf(search_word.toLowerCase()) !== -1){
            return item;
        }
    })
}

它工作正常,但我需要逐个指定每个对象属性名称。我希望有一些更通用的东西,它将遍历所有属性名称。我已尝试过方法:

for(let property in item)

但对我不起作用。你能建议吗?啊,我想避免使用jQuery。

干杯, 丹尼尔

2 个答案:

答案 0 :(得分:2)

为什么不直接对完整对象进行字符串化

if(search_word){
    licenses = licenses.filter((item) => {
        if(JSON.stringify(item).toLowerCase().indexOf(search_word.toLowerCase()) !== -1){
            return item;
        }
    })
}

如果您的对象体积很大,那么会节省时间,而且这样您就不需要检查所有属性。

它会遗漏的一件事是,如果有人搜索namecontent,那么一切都会出现。

答案 1 :(得分:2)

您可以像这样使用someObject.keys

if(search_word){
    let l_search_word = search_word.toLowerCase(); 
    licenses = licenses.filter( item =>
        Object.keys(item).some( key => 
            item[key].toLowerCase().indexOf(l_search_word) !== -1
        )
    )
}

您也可以使用indexOf

而不是includes
item[key].toLowerCase().includes(l_search_word)