Как отсортировать функцией sort многомерный ассоциативный массив?
пример попытки отсортировать многомерный массив по полю full_time:
var array = { "2685": { "deal_title": "Настроить телефонию", "COMPANY_ID": "1709", "deadline": "", "COMPANY_TITLE": "ГК Оптимум", "full_time": " - " }, "3531": { "deal_title": "CRG Внедрение Битркис24 + Коробка", "COMPANY_ID": "2009", "deadline": "", "COMPANY_TITLE": "ПРОЕКТНЫЙ ИНСТИТУТ \"ГЕОПЛАН\"", "full_time": " - " }, "5037": { "deal_title": "Приложение для Битрикс24", "COMPANY_ID": "2009", "deadline": "", "COMPANY_TITLE": "ПРОЕКТНЫЙ ИНСТИТУТ \"ГЕОПЛАН\"", "full_time": " - " }, "5575": { "deal_title": "Базовое внедрение (54)", "COMPANY_ID": "1336", "deadline": "", "COMPANY_TITLE": "ИП Лебедев Максим Андреевич", "full_time": " - " }, "6521": { "deal_title": "Доработка Битркис24", "COMPANY_ID": "1717", "deadline": "", "COMPANY_TITLE": "АЛЬФА-ГИФТС ГРУПП", "full_time": " - " }, "6551": { "deal_title": "Приложение Стоп-работа", "COMPANY_ID": "1362", "deadline": "", "COMPANY_TITLE": "Роско", "full_time": " - " }, "6797": { "deal_title": "Экспорт остатков по кассам", "COMPANY_ID": "1336", "deadline": "", "COMPANY_TITLE": "ИП Лебедев Максим Андреевич", "full_time": " - " }, "10151": { "deal_title": "Сопровождение на 2021 год (7 часов в месяц)", "COMPANY_ID": "2569", "deadline": "", "COMPANY_TITLE": "Российское Газовое Общество", "full_time": " - " }, "10263": { "deal_title": "Купон на УФ (1 год)", "COMPANY_ID": "2587", "deadline": "", "COMPANY_TITLE": "Компас-Р", "full_time": " - " }, "10375": { "deal_title": "Прием оплат+доработка интеграции", "COMPANY_ID": "2191", "deadline": "", "COMPANY_TITLE": "Комтех", "full_time": " - " }, "10749": { "deal_title": "Доработки портала (сентябрь)", "COMPANY_ID": "1278", "deadline": "", "COMPANY_TITLE": "ООО \"ТЕРВУД\"", "full_time": " - " }, "10835": { "deal_title": "Доработки коробки", "COMPANY_ID": "3179", "deadline": "", "COMPANY_TITLE": "ООО \"Много Мебели\"", "full_time": " - " }, "10897": { "deal_title": "Сопровождение", "COMPANY_ID": "3473", "deadline": "", "COMPANY_TITLE": "ООО \"УПРАВЛЕНЧЕСКИЕ РЕШЕНИЯ\"", "full_time": " - " }, "11017": { "deal_title": "Техподдержка Битрикс24 с программированием (40 часов)", "COMPANY_ID": "2501", "deadline": "2022-05-31T03:00:00+03:00", "COMPANY_TITLE": "АО «НИИ «ПОЛЮС» ИМ. М.Ф.СТЕЛЬМАХА»", "full_time": " - " }, "11183": { "deal_title": "Доработки портала (декабрь)", "COMPANY_ID": "1278", "deadline": "2022-01-13T03:00:00+03:00", "COMPANY_TITLE": "ООО \"ТЕРВУД\"", "full_time": " - " }, "11213": { "deal_title": "Техподдержка Битрикс24 с 1 по 30 июня 2021 года", "COMPANY_ID": "1362", "deadline": "2022-01-31T03:00:00+03:00", "COMPANY_TITLE": "Роско", "full_time": " - " }, "11227": { "deal_title": "ВН", "COMPANY_ID": "52701", "deadline": "2022-01-20T03:00:00+03:00", "COMPANY_TITLE": "ООО \"РУССКИЙ ТУР\"", "full_time": " - " }, "11235": { "deal_title": "Доработка способов оплаты в приложении \"Выбор услуг\"", "COMPANY_ID": "2335", "deadline": "2022-01-31T03:00:00+03:00", "COMPANY_TITLE": "ООО \"МОСУСТАНОВКА\"", "full_time": " - " }, "11321": { "deal_title": "Разработка ТЗ на приложение для Битрикс24", "COMPANY_ID": "55227", "deadline": "2022-02-16T03:00:00+03:00", "COMPANY_TITLE": "ООО \"АКРИТ-СЕРВИС\"", "full_time": " - " }, "11331": { "deal_title": "Техподдержка Битрикс24 с 1 по 30 июня 2021 года", "COMPANY_ID": "1362", "deadline": "2022-02-28T03:00:00+03:00", "COMPANY_TITLE": "Роско", "full_time": " - " }, "11345": { "deal_title": "тест 1", "COMPANY_ID": "55233", "deadline": "2022-02-10T03:00:00+03:00", "COMPANY_TITLE": "Тест Роман", "task_id": "29191", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:16:45+03:00", "comment": "тест", "full_time": 56699208 }, "11365": { "deal_title": "тест 2", "COMPANY_ID": "55235", "deadline": "2022-02-07T03:00:00+03:00", "COMPANY_TITLE": "тест Роман 2", "task_id": "29187", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:16:12+03:00", "full_time": -202500792 }, "11391": { "deal_title": "тестовая сделка 3", "COMPANY_ID": "55241", "deadline": "2022-02-09T03:00:00+03:00", "COMPANY_TITLE": "тест Роман 3", "task_id": "29183", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:15:24+03:00", "full_time": -29700793 } } function compare(a, b) { return a.full_time - b.full_time; } array.sort(compare); console.log('array'); console.log(array); выводит ошибку: Uncaught TypeError: array.sort is not a function почему не сортирует и как исправить? |
raja,
объекты не сортируются, сортируются массивы!!! |
а как тогда создать ассоциативный многомерный массив вместо объекта?
|
Потому, что array у Вас не массив, а объект.
Массивы задаются в квадратных скобках [] |
Цитата:
|
a.full_time - b.full_time;
У вас full_time то строка, то число. Их нельзя вычетать. |
Цитата:
|
Цитата:
Теперь про "как исправить". Ты можешь работать с самой последовательностью ключей. Object.keys() Вернет тебе сам список ключей и это уже будет массив. ;) Изменить его и "переставить местами" элементы, опираясь на данные в объекте, уже выполнимая задача. Этот массив может быть кагбэ индексом (в понимании СУБД) для перебора данных объекта в нужном порядке. |
var array = { "2685": { "deal_title": "Настроить телефонию", "COMPANY_ID": "1709", "deadline": "", "COMPANY_TITLE": "ГК Оптимум", "full_time": " - " }, "3531": { "deal_title": "CRG Внедрение Битркис24 + Коробка", "COMPANY_ID": "2009", "deadline": "", "COMPANY_TITLE": "ПРОЕКТНЫЙ ИНСТИТУТ \"ГЕОПЛАН\"", "full_time": " - " }, "5037": { "deal_title": "Приложение для Битрикс24", "COMPANY_ID": "2009", "deadline": "", "COMPANY_TITLE": "ПРОЕКТНЫЙ ИНСТИТУТ \"ГЕОПЛАН\"", "full_time": " - " }, "5575": { "deal_title": "Базовое внедрение (54)", "COMPANY_ID": "1336", "deadline": "", "COMPANY_TITLE": "ИП Лебедев Максим Андреевич", "full_time": " - " }, "6521": { "deal_title": "Доработка Битркис24", "COMPANY_ID": "1717", "deadline": "", "COMPANY_TITLE": "АЛЬФА-ГИФТС ГРУПП", "full_time": " - " }, "6551": { "deal_title": "Приложение Стоп-работа", "COMPANY_ID": "1362", "deadline": "", "COMPANY_TITLE": "Роско", "full_time": " - " }, "6797": { "deal_title": "Экспорт остатков по кассам", "COMPANY_ID": "1336", "deadline": "", "COMPANY_TITLE": "ИП Лебедев Максим Андреевич", "full_time": " - " }, "10151": { "deal_title": "Сопровождение на 2021 год (7 часов в месяц)", "COMPANY_ID": "2569", "deadline": "", "COMPANY_TITLE": "Российское Газовое Общество", "full_time": " - " }, "10263": { "deal_title": "Купон на УФ (1 год)", "COMPANY_ID": "2587", "deadline": "", "COMPANY_TITLE": "Компас-Р", "full_time": " - " }, "10375": { "deal_title": "Прием оплат+доработка интеграции", "COMPANY_ID": "2191", "deadline": "", "COMPANY_TITLE": "Комтех", "full_time": " - " }, "10749": { "deal_title": "Доработки портала (сентябрь)", "COMPANY_ID": "1278", "deadline": "", "COMPANY_TITLE": "ООО \"ТЕРВУД\"", "full_time": " - " }, "10835": { "deal_title": "Доработки коробки", "COMPANY_ID": "3179", "deadline": "", "COMPANY_TITLE": "ООО \"Много Мебели\"", "full_time": " - " }, "10897": { "deal_title": "Сопровождение", "COMPANY_ID": "3473", "deadline": "", "COMPANY_TITLE": "ООО \"УПРАВЛЕНЧЕСКИЕ РЕШЕНИЯ\"", "full_time": " - " }, "11017": { "deal_title": "Техподдержка Битрикс24 с программированием (40 часов)", "COMPANY_ID": "2501", "deadline": "2022-05-31T03:00:00+03:00", "COMPANY_TITLE": "АО «НИИ «ПОЛЮС» ИМ. М.Ф.СТЕЛЬМАХА»", "full_time": " - " }, "11183": { "deal_title": "Доработки портала (декабрь)", "COMPANY_ID": "1278", "deadline": "2022-01-13T03:00:00+03:00", "COMPANY_TITLE": "ООО \"ТЕРВУД\"", "full_time": " - " }, "11213": { "deal_title": "Техподдержка Битрикс24 с 1 по 30 июня 2021 года", "COMPANY_ID": "1362", "deadline": "2022-01-31T03:00:00+03:00", "COMPANY_TITLE": "Роско", "full_time": " - " }, "11227": { "deal_title": "ВН", "COMPANY_ID": "52701", "deadline": "2022-01-20T03:00:00+03:00", "COMPANY_TITLE": "ООО \"РУССКИЙ ТУР\"", "full_time": " - " }, "11235": { "deal_title": "Доработка способов оплаты в приложении \"Выбор услуг\"", "COMPANY_ID": "2335", "deadline": "2022-01-31T03:00:00+03:00", "COMPANY_TITLE": "ООО \"МОСУСТАНОВКА\"", "full_time": " - " }, "11321": { "deal_title": "Разработка ТЗ на приложение для Битрикс24", "COMPANY_ID": "55227", "deadline": "2022-02-16T03:00:00+03:00", "COMPANY_TITLE": "ООО \"АКРИТ-СЕРВИС\"", "full_time": " - " }, "11331": { "deal_title": "Техподдержка Битрикс24 с 1 по 30 июня 2021 года", "COMPANY_ID": "1362", "deadline": "2022-02-28T03:00:00+03:00", "COMPANY_TITLE": "Роско", "full_time": " - " }, "11345": { "deal_title": "тест 1", "COMPANY_ID": "55233", "deadline": "2022-02-10T03:00:00+03:00", "COMPANY_TITLE": "Тест Роман", "task_id": "29191", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:16:45+03:00", "comment": "тест", "full_time": 56699208 }, "11365": { "deal_title": "тест 2", "COMPANY_ID": "55235", "deadline": "2022-02-07T03:00:00+03:00", "COMPANY_TITLE": "тест Роман 2", "task_id": "29187", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:16:12+03:00", "full_time": -202500792 }, "11391": { "deal_title": "тестовая сделка 3", "COMPANY_ID": "55241", "deadline": "2022-02-09T03:00:00+03:00", "COMPANY_TITLE": "тест Роман 3", "task_id": "29183", "task_name": "Получить платёж на сумму 1 руб. по статье \"Не заполнено\"", "begin_time": "2022-02-07T12:15:24+03:00", "full_time": -29700793 } } var sortedArray = Object.values(array).sort((a, b) => { const [first, second] = [a, b].map(({full_time: value}) => { if (typeof value === 'string' && value.includes('-')) { return 0; } return value; }); return first - second; }); console.log(sortedArray); |
Часовой пояс GMT +3, время: 19:19. |