JavaScript Array Object Многоуровневое значение поиска - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу найти в JavaScript объект многоуровневого массива.

[{"head": "Heading 1", "list": [{"name": "name 1", "desc": "desc 1"}, {"name": "name 1", "desc": "desc 1"}]}, {"head": "Заголовок 2", "list": [{"name": "name 1 "," desc ":" desc 1 "}, {" name ":" name 1 "," desc ":" desc 1 "}]}]

Если мы ищем" Заголовок 2 "

Ожидаемый результат:

[{"head": "Заголовок 2", "list": [{"name": "name 1", "desc": "desc 1"}}, {"name": "name 1", "desc": "desc 1"}]}]

Если мы ищем "name 1"

Ожидаемый результат:

[{"head": "Заголовок 1", "list": [{"name": "name 1", "desc": "desc 1"}, {"name": "name 1", "desc":" desc 1 "}]}, {" head ":" Заголовок 2 "," list ": [{" name ":" name 1 "," desc ":" desc 1 "}, {" name ":"name 1", "desc": "desc 1"}]}]

Ищете оптимизированный способ сделать этот поиск.Кто-нибудь может мне помочь с этой проблемой?

ОБНОВЛЕНО : неверный формат JSON

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете выполнить рекурсивный поиск искомого значения вложенного значения данного объекта.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...