dimas15,
сортируйте массив!!! |
Цитата:
|
dimas15,
я пас, может кто-то другой вам поможет ... |
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)); |
Цитата:
лучше так [{first, data : []} , {first, data : []}...., {first : "2", data : []}] |
Цитата:
Если проходить объект через for in поряок будет один (всегда сначала все численные ключи в порядке возрастания, потом остальные ключи в порядке их добавления в объект. Такой порядок не определен в спецификации, но его придерживаются все браузеры), если смотреть в отладчике, то порядок будет другой (отсортирован по алфавиту) |
dimas15,
const collator = new Intl.Collator(["ru", "en"], { numeric: true }); let arr = obj.slice(0).sort((a, b) => { let numA = (/^\d+/).test(a.name), numB = (/^\d+/).test(b.name); if (numA && !numB) return 1; if (!numA && numB) return -1; return collator.compare( a.name, b.name ) } ); const modmas = []; let temp = {}; for (const el of arr) { const first = el.name[0].toUpperCase(); if (temp.first != first) { temp = { first, data: [] }; modmas.push(temp) }; temp.data.push(el) } console.log(modmas); const keys = modmas.map(({first}) => first); console.log(keys); |
Цитата:
|
Цитата:
Еще раз повторю Цитата:
|
Часовой пояс GMT +3, время: 17:02. |