Я полагаю, у вас есть входные данные в этом формате:
const countJson = {
types: [
{
type_label: 'Test1',
open: 11,
},
{
type_label: 'Test2',
open: 25,
},
{
type_label: 'Test3',
open: 4,
},
{
type_label: 'Test4',
open: 5,
},
{
type_label: 'Test5',
open: 9,
},
{
type_label: 'Test6',
open: 11,
},
{
type_label: 'Test7',
open: 13,
},
{
type_label: 'Test8',
open: 27,
},
],
// ...
};
Затем вы можете использовать эту функцию, которая принимает ваш объект count Json в качестве ввода и возвращает строку с ключами, меньшими, чем индекс 2, с их исходные ключи (Test1, Test2, Test3) и все элементы выше тех, чьи значения суммируются и объединяются в один ключ 'others':
const mergeCounts = countJson => {
const itemsObj = countJson.types
.reduce((obj, item, i) => {
const k = item.type_label;
const v = item.open;
// for all items after index 2, sum and merge them into a single key 'others'
if (i > 2) {
const othersValue = v + (obj['others'] || 0);
return {
...obj,
'others': othersValue,
};
}
// for items up to index 2, return key value pairs
return {
...obj,
[item.type_label]: item.open
};
}, {})
// At this point, you get:
// itemsObj = { Test1: 11, Test2: 25, Test3: 4, others: 65 }
return Object.keys(itemsObj)
.map((k, i) => `${k} ${itemsObj[k]}`)
.join(','); // this results: Test1 11,Test2 25,Test3 4,others 65
};
console.log(
mergeCounts(countJson) // results: Test1 11,Test2 25,Test3 4,others 65
);