Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отсортировать массив по свойствам ? ("ассоциативный массив") (https://javascript.ru/forum/misc/84193-kak-otsortirovat-massiv-po-svojjstvam-associativnyjj-massiv.html)

Sice 01.07.2022 21:45

Как отсортировать массив по свойствам ? ("ассоциативный массив")
 
Добрый день. У меня есть Массив, в который я добавляю элементы таким образом:
TickersArray = []
TickersArray[ticker] = spread_5m;

Где в цикле меняется: ticker как строковая переменная, spread_5m - float. Получаю в консоли такой вывод:



Я хочу отсортировать теперь этот массив по свойствам (значению) в порядке убывания с сохранением ключей, разумеется. Подскажите пожалуйста как это сделать. Спасибо!

рони 01.07.2022 21:55

Цитата:

Сообщение от Sice
Подскажите пожалуйста как это сделать.

лучше этого никогда не делать ... сделайте нормальный массив и сортируйте как хотите.

Sice 02.07.2022 08:50

Цитата:

Сообщение от рони (Сообщение 546427)
лучше этого никогда не делать ... сделайте нормальный массив и сортируйте как хотите.

Можете пожалуйста показать пример, как лучше добавлять элементы в массив и правильно его отсортировывать в моём случае ? Спасибо.

voraa 02.07.2022 09:31

Например, так

TickersArray = [];
// Добавление
TickersArray.push({ticker:ticker, value:spread_5m});
// Сортировка
TickersArray.sort ((x,y) => x.value - y.value))


Но все зависит и от того, какие операции вы еще делаете с этим набором.
В js нет ассоциированных массивов. Массивы только с числовыми индексами.
Для хранения информации в виде <строковый ключ> -> <значение> можно использовать объекты или Map. Но их нельзя сортировать.

Если нужен частый доступ к элементам по ticker, то может быть лучше использовать объект или Map, а для сортировки временно преобразовывать их в массив и сортировать.

Например так
Tickers = {};
// Добавление
Tickers[ticker] = spread_5m;
// Сортировка
TickersSortArray = Object.entries(Tickers).sort ((x,y) => x[1] - y[1]))

[/JS]
TickersSortArray - будет массивом, где каждый элемент - массив из 2 элементов. Первый (с индексом 0) - строковое значение вашего ticker, второй (с индексом 1) - числовое значение (ваш spread_5m)

рони 02.07.2022 09:54

voraa,
:yes: :thanks:

Sice 02.07.2022 17:50

Цитата:

Сообщение от voraa (Сообщение 546436)
Например, так

TickersArray = [];
// Добавление
TickersArray.push({ticker:ticker, value:spread_5m});
// Сортировка
TickersArray.sort ((x,y) => x.value - y.value))


Но все зависит и от того, какие операции вы еще делаете с этим набором.
В js нет ассоциированных массивов. Массивы только с числовыми индексами.
Для хранения информации в виде <строковый ключ> -> <значение> можно использовать объекты или Map. Но их нельзя сортировать.

Если нужен частый доступ к элементам по ticker, то может быть лучше использовать объект или Map, а для сортировки временно преобразовывать их в массив и сортировать.

Например так
Tickers = {};
// Добавление
Tickers[ticker] = spread_5m;
// Сортировка
TickersSortArray = Object.entries(Tickers).sort ((x,y) => x[1] - y[1]))

[/JS]
TickersSortArray - будет массивом, где каждый элемент - массив из 2 элементов. Первый (с индексом 0) - строковое значение вашего ticker, второй (с индексом 1) - числовое значение (ваш spread_5m)

Супер! Спасибо!


Часовой пояс GMT +3, время: 09:22.