【问题标题】:JavaScript Array Object Multi Level Search ValueJavaScript 数组对象多级搜索值
【发布时间】:2019-06-30 03:52:05
【问题描述】:

我想在 JavaScript 中搜索多级数组对象。

[{ "head": "标题 1", “列表”: [ { “名称”:“名称 1”, “描述”:“描述 1” },{ “名称”:“名称 1”, “描述”:“描述 1” }] },{ "head": "标题 2", “列表”: [ { “名称”:“名称 1”, “描述”:“描述 1” },{ “名称”:“名称 1”, “描述”:“描述 1” }] }]

如果我们搜索“标题 2”

预期结果:

[{ "head": "标题 2", “列表”: [ { “名称”:“名称 1”, “描述”:“描述 1” },{ “名称”:“名称 1”, “描述”:“描述 1” }] }]

如果我们搜索“名称 1”

预期结果:

[{ "head": "标题 1", “列表”: [ { “名称”:“名称 1”, “描述”:“描述 1” },{ “名称”:“名称 1”, “描述”:“描述 1” }] },{ "head": "标题 2", “列表”: [ { “名称”:“名称 1”, “描述”:“描述 1” },{ “名称”:“名称 1”, “描述”:“描述 1” }] }]

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

已更新:无效的 JSON 格式

【问题讨论】:

标签: javascript arrays ecmascript-6 ecmascript-2016


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2021-12-16
    • 2011-04-07
    • 2021-09-03
    • 2018-03-25
    • 2018-05-05
    相关资源
    最近更新 更多