Можно ли динамически фильтровать объект JSON, чтобы с помощью Angular отображались только поля, соответствующие тексту фильтра? - PullRequest
0 голосов
/ 02 апреля 2020

Прошу прощения, если об этом уже спрашивали; Я не смог найти ответ.

Вот моя проблема:

Я использую сложный объект JSON из веб-службы в моем приложении Angular. Затем я отображаю этот JSON объект в виде дерева для пользователя (с помощью ngx json viewer).

Поскольку дерево большое и сложное, я хотел предложить пользователям возможность сузить, какие поля они видят в представлении.

Я не смог выяснить, как отфильтровать поля из JSON, которые отображаются на основе фильтра текста, который я получаю из поля ввода. Я знаю, что могу запрашивать и фильтровать определенные значения полей, но я не видел, как фильтровать имена самих полей.

Так что, если у меня есть это JSON:

{
    "firstname": "John",
    "lastname": "Smith",
    "phone": "999-999-9999",
    "address": "123 Main St"
}

И пользователь вводит текст фильтра «имя», я хочу отобразить только соответствующие поля:

{
    "firstname": "John",
    "lastname": "Smith"
}

Имеет ли это смысл? Можно ли это сделать?

Спасибо всем!

1 Ответ

0 голосов
/ 08 апреля 2020
Object.keys(o).filter(o=>o.includes("name"))

Это даст вам совпадающие ключи, но не значения для этих ключей.

var o = {
    "firstname": "John",
    "lastname": "Smith",
    "phone": "999-999-9999",
    "address": "123 Main St"};

var matchingKeys = Object.keys(o).filter(o=>o.includes("name"));
var filteredObject = {};

matchingKeys.forEach(key => filteredObject[key] = o[key]);

Это сделает отфильтрованный объект:

{
    "firstname": "John",
    "lastname": "Smith"
}

И как машинописный текст функция ...


public filterObjectContainsKey(a_sFilterKey: string, a_oObject: Object): Object {

    var matchingKeys = Object.keys(a_oObject).filter(o=>o.includes(a_sFilterKey));
    var filteredObject = {};

    matchingKeys.forEach(key => filteredObject[key] = a_oObject[key]);
    return filteredObject;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...