Найти количество вхождений элементов в списке внутри JSON - PullRequest
0 голосов
/ 24 апреля 2018

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

Например,

{
    "data": [
        {"ownerId":"00001", "make": "Honda"},
        {"ownerId":"00002", "make": "Nissan"},
        {"ownerId":"00003", "make": "Audi"},
        {"ownerId":"00004", "make": "Porsche"},
        {"ownerId":"00005", "make": "Honda"},
        {"ownerId":"00006", "make": "Honda"},
        {"ownerId":"00007", "make": "Audi"},
        {"ownerId":"00008", "make": "Volkswagen"},
        {"ownerId":"00009", "make": "Honda"},
        {"ownerId":"00010", "make": "Porsche"},
        {"ownerId":"00011", "make": "Volkswagen"}
    ]
}

Фильтр списка для расчета количества:

["Honda", "Audi", "Porsche"]

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

[{"Audi": 2}, {"Honda": 4}, {"Porsche": 2}]

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

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете использовать _.countBy(), чтобы получить и выставить счетчик за марку, а затем _.pick() нужные вам элементы:

const cars = {"data":[{"ownerId":"00001","make":"Honda"},{"ownerId":"00002","make":"Nissan"},{"ownerId":"00003","make":"Audi"},{"ownerId":"00004","make":"Porsche"},{"ownerId":"00005","make":"Honda"},{"ownerId":"00006","make":"Honda"},{"ownerId":"00007","make":"Audi"},{"ownerId":"00008","make":"Volkswagen"},{"ownerId":"00009","make":"Honda"},{"ownerId":"00010","make":"Porsche"},{"ownerId":"00011","make":"Volkswagen"}]};

const list = ["Honda", "Audi", "Porsche"];

const result = _.pick(_.countBy(cars.data, 'make'),  ["Honda", "Audi", "Porsche"]);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
...