сортировать массив объектов массива, вычисляя сумму значения ключа, связывая его по ключу - PullRequest
0 голосов
/ 21 мая 2019

У меня есть массив объектов

[{
    "data": [{
        "name": "John",
        "id": 1,
        "total": 5
    }, {
        "name": "Bob",
        "id": 2,
        "total": 7
    }],
    "location": "CA"
}, {
    "data": [{
        "name": "John",
        "id": 1,
        "total": 1
    }, {
        "name": "Matt",
        "id": 3,
        "total": 9
    }],
    "location": "NY"
}]

И я пытаюсь отсортировать его, рассчитав сумму «общего» значения, связав его ключ «id» в lodash или javascript.Эти данные передаются в верхние графики для столбца с накоплением.Я попытался применить groupBy, sortBy, и все примеры, которые я вижу, используют только массив, а не массив массивов.

Полученный массив, я ожидаю, будет

[{
    "data": [{
        "name": "Bob",
        "id": 2,
        "total": 7
    },{
        "name": "John",
        "id": 1,
        "total": 5
    }],
    "location": "CA"
}, {
    "data": [{
        "name": "Matt",
        "id": 3,
        "total": 9
    },{
        "name": "John",
        "id": 1,
        "total": 1
    }, ],
    "location": "NY"
}]

1 Ответ

0 голосов
/ 21 мая 2019

Один из способов решения этой проблемы - использование ванильного Javascript:

const arr = [{
    "data": [{
        "name": "John",
        "id": 1,
        "total": 5
    }, {
        "name": "Bob",
        "id": 2,
        "total": 7
    }],
    "location": "CA"
}, {
    "data": [{
        "name": "John",
        "id": 1,
        "total": 1
    }, {
        "name": "Matt",
        "id": 3,
        "total": 9
    }],
    "location": "NY"
}];

arr.forEach(obj => {
  obj.data.sort((a,b) => b.total + b.id - a.total - a.id);
});

console.log(arr);
...