| Сообщение от рони   | 
	| 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));