Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2022, 11:06
Аспирант
Отправить личное сообщение для raja Посмотреть профиль Найти все сообщения от raja
 
Регистрация: 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
почему не сортирует и как исправить?
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2022, 11:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

raja,
объекты не сортируются, сортируются массивы!!!
Ответить с цитированием
  #3 (permalink)  
Старый 09.02.2022, 11:24
Аспирант
Отправить личное сообщение для raja Посмотреть профиль Найти все сообщения от raja
 
Регистрация: 22.09.2016
Сообщений: 40

а как тогда создать ассоциативный многомерный массив вместо объекта?
Ответить с цитированием
  #4 (permalink)  
Старый 09.02.2022, 11:41
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Потому, что array у Вас не массив, а объект.
Массивы задаются в квадратных скобках []
Ответить с цитированием
  #5 (permalink)  
Старый 09.02.2022, 11:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

Сообщение от raja
а как тогда создать ассоциативный
В js нет ассоциативных массивов.
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2022, 11:45
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,744

a.full_time - b.full_time;
У вас full_time то строка, то число. Их нельзя вычетать.
Ответить с цитированием
  #7 (permalink)  
Старый 09.02.2022, 12:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от voraa
У вас full_time то строка, то число. Их нельзя вычетать.
Само действие возможно. Но результат бывает "интересный"...
Ответить с цитированием
  #8 (permalink)  
Старый 09.02.2022, 12:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от raja
почему не сортирует и как исправить?
Про "почему" тебе уже написали...
Теперь про "как исправить".

Ты можешь работать с самой последовательностью ключей.
Object.keys()

Вернет тебе сам список ключей и это уже будет массив.
Изменить его и "переставить местами" элементы, опираясь на данные в объекте, уже выполнимая задача.

Этот массив может быть кагбэ индексом (в понимании СУБД) для перебора данных объекта в нужном порядке.
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2022, 14:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать массив в базу mysqli. wadim Серверные языки и технологии 29 22.01.2017 09:29
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как лучше сделать глобальный массив skyfish AJAX и COMET 4 17.02.2009 18:05
Как создать ассоциативный массив JS + CSS occlusion Общие вопросы Javascript 3 12.01.2009 09:19
ассоциативный массив где ключ это год или ..... Sandr Общие вопросы Javascript 8 18.07.2008 15:39