09.02.2022, 11:06
|
Аспирант
|
|
Регистрация: 22.09.2016
Сообщений: 40
|
|
Как отсортировать функцией 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
почему не сортирует и как исправить?
|
|
09.02.2022, 11:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
raja,
объекты не сортируются, сортируются массивы!!!
|
|
09.02.2022, 11:24
|
Аспирант
|
|
Регистрация: 22.09.2016
Сообщений: 40
|
|
а как тогда создать ассоциативный многомерный массив вместо объекта?
|
|
09.02.2022, 11:41
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Потому, что array у Вас не массив, а объект.
Массивы задаются в квадратных скобках []
|
|
09.02.2022, 11:42
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
Сообщение от raja
|
а как тогда создать ассоциативный
|
В js нет ассоциативных массивов.
|
|
09.02.2022, 11:45
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,744
|
|
a.full_time - b.full_time;
У вас full_time то строка, то число. Их нельзя вычетать.
|
|
09.02.2022, 12:15
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от voraa
|
У вас full_time то строка, то число. Их нельзя вычетать.
|
Само действие возможно. Но результат бывает "интересный"...
|
|
09.02.2022, 12:19
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от raja
|
почему не сортирует и как исправить?
|
Про "почему" тебе уже написали...
Теперь про "как исправить".
Ты можешь работать с самой последовательностью ключей.
Object.keys()
Вернет тебе сам список ключей и это уже будет массив.
Изменить его и "переставить местами" элементы, опираясь на данные в объекте, уже выполнимая задача.
Этот массив может быть кагбэ индексом (в понимании СУБД) для перебора данных объекта в нужном порядке.
|
|
10.02.2022, 14:07
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
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);
|
|
|
|