Javascript - получение данных из массива объектов - PullRequest
0 голосов
/ 09 декабря 2018

Я получил этот пример данных.

"array" : [
    {"Id" : "1", "preferred" : false}, 
    {"Id" : "1", "preferred" : true }, 
    {"Id" : "2", "preferred" : false}, 
    {"Id" : "2", "preferred" : false},]

И я хотел бы получить из этого что-то вроде этого.

"array2":[{"Id": 1, numOfTrue: 1, numOfFalse: 1},{"Id": 2, numOfTrue: 0, numOfFalse: 2}]

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

const unique = [...new Set(array.map(item => Id))];

Следующим шагом будет несколько forEach over array и сравнение значений Id и установка некоторых счетчиков для этого логического значения.Поэтому, прежде чем я углублюсь в решение forEach, я хотел бы спросить, есть ли другой способ использования. filter() и .reduce() методов.

1 Ответ

0 голосов
/ 09 декабря 2018

Вы можете использовать reduce() для создания объекта группировки с ключом Id.Каждый раз, когда вы видите, что Id снова увеличивает значение на соответствующую клавишу.В конце ваш массив будет Object.values() объекта:

let array = [
    {"Id" : "1", "preferred" : false}, 
    {"Id" : "1", "preferred" : true }, 
    {"Id" : "2", "preferred" : false}, 
    {"Id" : "2", "preferred" : false}
]

let counts = array.reduce((counts, {Id, preferred}) => {
    // If you haven't seen this Id yet, make a new entry
    if (!counts[Id]) counts[Id] = {Id, numOfTrue: 0, numOfFalse: 0}

    // increment the appropriate value:
    if (preferred) counts[Id].numOfTrue++
    else counts[Id].numOfFalse++
    return counts
}, {})

// get the values array of the object:
console.log(Object.values(counts))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...