JavaScript数组对象多级搜索值

时间:2019-02-06 08:39:16

标签: javascript arrays ecmascript-6 ecmascript-7

我要搜索JavaScript多级数组对象。

[{     “ head”:“标题1”,     “列表”:[{         “ name”:“名称1”,         “ desc”:“ desc 1”     },{         “ name”:“名称1”,         “ desc”:“ desc 1”     }] },{     “ head”:“标题2”,     “列表”:[{         “ name”:“名称1”,         “ desc”:“ desc 1”     },{         “ name”:“名称1”,         “ desc”:“ desc 1”     }] }]

如果我们搜索“标题2”

预期结果:

[{     “ head”:“标题2”,     “列表”:[{         “ name”:“名称1”,         “ desc”:“ desc 1”     },{         “ name”:“名称1”,         “ desc”:“ desc 1”     }] }]

如果我们搜索“名称1”

预期结果:

[{     “ head”:“标题1”,     “列表”:[{         “ name”:“名称1”,         “ desc”:“ desc 1”     },{         “ name”:“名称1”,         “ desc”:“ desc 1”     }] },{     “ head”:“标题2”,     “列表”:[{         “ name”:“名称1”,         “ desc”:“ desc 1”     },{         “ name”:“名称1”,         “ desc”:“ desc 1”     }] }]

寻找一种优化的方式进行此搜索。谁能帮助我解决这个问题?

已更新:无效的JSON格式

1 个答案:

答案 0 :(得分:0)

您可以递归搜索给定对象的嵌套值的所需值。

function filter(array, value) {
    function find(object) {
        return Object
            .values(object)
            .some(v => v === value || v && typeof v === 'object' && find(v));
    }

    return array.filter(find);
}

var array = [{ head: "Heading 1", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }, { head: "Heading 2", list: [{ name: "name 1", desc: "desc 1" }, { name: "name 1", desc: "desc 1" }] }]

console.log(filter(array, "Heading 2"));
console.log(filter(array, "name 1"));
.as-console-wrapper { max-height: 100% !important; top: 0; }