Сообщение от рони
|
dimas15,
попробуем ещё раз)))
чем вас сортировка массива не устраивает? зачем надо игры с объектами и ключами устраивать?
|
Делаю все для этого:
Все продукты А-Я
Все А Б В Г Д Е Ж З И К Л М Н О П Р С Т У
Ф Х Ц Ш Щ Э A B C D E F G H I K L M N O P Q
R S T U V W 2
2
2-Меркапт
А
Агар
Агидол-2
...
Делаю все это из массива обьектов:
[ {
"name": "2-этилгексил",
"url": "2-этилг",
"id": 1020
},
{
"name": "Acralen",
"url": "Acra",
"id": 193
},
{
"name": "Acr5028",
"url": "Acr",
"id": 1295
},
...
...
....
]
Преобразую в это:
[ 2: [{
"name": "2-этилге",
"url": "2-этилгек",
"id": 1020
},...],
A: [ {
"name": "Acralen",
"url": "Acralen",
"id": 193
},
{
"name": "Acro5028",
"url": "Acro5028",
"id": 1295
},...]
.....]
И сортирую этот обьект массивов по ключам 2,А,Б,A,D...
В итоге все сортируется почти так как надо, только цифры идут первыми а они должны идти в конце.
"Нужно так: А,Б,В,Г,Д,Е,Ж,З,И,К,Л,М,Н,О,П,Р,С ,Т,У,Ф,Х,Ц,Ш,Щ,Э,A,B,C,D,E,F,G,H,I,K,L,M,N ,O,P,Q,R,S,T,U,V,W,2"
"Получается так(цифры сортируются в начале а не в конце массива): 2,А,Б,В,Г,Д,Е,Ж,З,И,К,Л,М,Н,О,П,Р, С,Т,У,Ф,Х,Ц,Ш,Щ,Э,A,B,C,D,E,F,G,H,I,K,L,M ,N,O,P,Q,R,S,T,U,V,W"
//перестраиваю массив обьектов.
const modmas = obj.reduce((a, b) => {
const first = b.name[0].toUpperCase();
if (!a[first]) {
a[first] = [];
}
a[first].push(b);
return a;
},{})
//проверяю тип данных и преобразую числа из string в number
var arr = [];
var mm = Object.keys(modmas);
var length = mm.length;
for (var i = 0; i < length; i++){
if (!isNaN(mm[i]) === true) {
arr.push(Number(mm[i]));
} else {
arr.push(mm[i]);
}
}
//сортирую
const collator = new Intl.Collator('ru');
const sortmas = arr.sort(function (a, b) {
if(isNaN(a) && !isNaN(b)){
return -1;
}else if(!isNaN(a) && isNaN(b)){
return 1;
}
return collator.compare(a, b);
/*return a.localeCompare(b, undefined, {
numeric: true,
sensitivity: 'base'
});*/
})
var nws = {};
//возвращаем отсортированный исходный массив с вложенными данными
sortmas.forEach((key)=> {
nws[key] = modmas[key];
});
console.log(":\t\t"+Object.keys(nws));