Делая предположения о том, как должен выглядеть вывод:
function magicFunction(data){
arr.push(data);
arr.sort((a,b) => {
const nameNumA = parseInt(a.name.split('_')[1]);
const nameNumB = parseInt(b.name.split('_')[1]);
if (nameNumA == nameNumB){
return b.size - a.size
} else{
return nameNumA - nameNumB;
}
});
return void(0);
}
const arr = []
magicFunction({name: 'CAT_1', size: 175});
magicFunction({name: 'CAT_5', size: 700});
magicFunction({name: 'CAT_5', size: 20});
magicFunction({name: 'CAT_1', size: 500});
magicFunction({name: 'CAT_1', size: 5000});
magicFunction({name: 'CAT_6', size: 2});
magicFunction({name: 'CAT_6', size: 200});
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Вывод:
[
{
"name": "CAT_1",
"size": 5000
},
{
"name": "CAT_1",
"size": 500
},
{
"name": "CAT_1",
"size": 175
},
{
"name": "CAT_5",
"size": 700
},
{
"name": "CAT_5",
"size": 20
},
{
"name": "CAT_6",
"size": 200
},
{
"name": "CAT_6",
"size": 2
}
]
Конечно, с точки зрения производительности лучше добавлять каждый элемент, а затем сортировать один раз, а не сортировать каждый раз, когда вы вызываете функцию, но так как я хочу придерживаться способа, которым вы вызываете функцию, мне нужно сортировать каждый раз.
Кроме того, не рекомендуется изменять мутирование массив вне функции замыкания, т. е. в глобальной области видимости.
Итак, все же я бы решил это следующим образом:
const arr = []
arr.push({name: 'CAT_1', size: 175});
arr.push({name: 'CAT_5', size: 700});
arr.push({name: 'CAT_5', size: 20});
arr.push({name: 'CAT_1', size: 500});
arr.push({name: 'CAT_1', size: 5000});
arr.push({name: 'CAT_6', size: 2});
arr.push({name: 'CAT_6', size: 200});
const sortedArr = arr.sort((a,b) => {
const nameNumA = parseInt(a.name.split('_')[1]);
const nameNumB = parseInt(b.name.split('_')[1]);
if (nameNumA == nameNumB){
return b.size - a.size
} else{
return nameNumA - nameNumB;
}
});
console.log(sortedArr);
.as-console-wrapper { max-height: 100% !important; top: 0; }