Подчеркнуть. js найти Где-то глубоко JSON - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблемы с сужением фильтра до указанного c объекта, который мне нужен в моем JSON.

JSON:

var items = {
    "itemsGroup": [
        {
            "item": [
                {"description": "Name", "value": "Jane Doe"},
                {"description": "Age", "value": 23},
                {"description": "Phone", "value": "515-555-1234"},
                {"description": "Address", "value": "123 Fake St"},
                {"description": "City", "value": "Winchestertonfieldville"},
                {"description": "State", "value": "IA"},
                {"description": "Zip", "value": 50000}
            ],
        },
        {
            "item": [
                {"description": "Eye Color", "value": "Blue"},
                {"description": "Hair", "value": "Blonde"},
                {"description": "Height", "value": "5'6"},
                {"description": "Weight", "value": 125}
            ]
        }
    ]
}

Я хочу объект содержащий Name в первом вложенном массиве:

{"description": "Name", "value": "Jane Doe"}

Я могу добиться этого следующим образом:

_.findWhere(items.itemsGroup[0].item, {description:'Name'})

Но я хочу чтобы учесть случай, когда JSON может измениться.

Самое близкое, что я получил, с этой функцией подчеркивания:

_.filter(items.itemsGroup, function(i) {
    return _.findWhere(i.item, {description:'Name'});
});

Но это возвращает весь первый вложенный массив, а не объект, который я ищу (как в моем первом примере).

"item": [
    {"description": "Name", "value": "Jane Doe"},
    {"description": "Age", "value": 23},
    {"description": "Phone", "value": "515-555-1234"},
    {"description": "Address", "value": "123 Fake St"},
    {"description": "City", "value": "Winchestertonfieldville"},
    {"description": "State", "value": "IA"},
    {"description": "Zip", "value": 50000}
]

Я потратил слишком много времени, пытаясь найти решение. Нужны советы.

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2020

Содержимое "itemsGroup" - это массив, так что вы можете перебирать этот массив.

const items = {
    "itemsGroup": [
        {
            "item": [
                {"description": "Name", "value": "Jane Doe"},
                {"description": "Age", "value": 23},
                {"description": "Phone", "value": "515-555-1234"},
                {"description": "Address", "value": "123 Fake St"},
                {"description": "City", "value": "Winchestertonfieldville"},
                {"description": "State", "value": "IA"},
                {"description": "Zip", "value": 50000}
            ],
        },
        {
            "item": [
                {"description": "Eye Color", "value": "Blue"},
                {"description": "Hair", "value": "Blonde"},
                {"description": "Height", "value": "5'6"},
                {"description": "Weight", "value": 125}
            ]
        }
    ]
}

const { itemsGroup } = items;

itemsGroup.map((itemGroup) => {
  return _.findWhere(itemGroup.item, {description:'Name'})
});

Не является необязательным решением, но я думаю, это поможет.

...