У меня есть коллекция объектов в JavaScript, как это:
Object collection = new Object();
collection[123] = new Item(); //another object
collection[425] = new Item();
collection[2134] = new Item();
//etc. etc.
//TODO: sort items
Я бы хотел отсортировать эту коллекцию по свойствам объектов Item в коллекции. В JS Array есть хорошая встроенная функция сортировки, поэтому моей первой идеей было изменить код следующим образом:
Object collection = new Array();
collection[123] = new Item(); //another object
collection[425] = new Item();
collection[2134] = new Item();
//etc. etc.
collection.sort(comparisonFunction); //where comparisonfunction handles the sorting logic
Теперь коллекция хорошо отсортирована - однако я не могу получить доступ к элементам, используя свойство, которое я использовал для их установки, т.е.
collection[2134]
равно нулю, поскольку массив JS не содержит такого количества элементов (и даже если бы это было так, результат не был бы ожидаемым)
Что мне нужно, это
- возможность прямого доступа к элементам в коллекции с помощью заданного мной числового свойства (которое уже дано, когда не используется массив JS)
- возможность сортировки предметов в коллекции
Редактировать: объект не должен вести себя как массив, и он не является массивом природы. То, что мне нужно, довольно близко к Java TreeMap - коллекции, которая поддерживает определенный порядок, и которая также является картой. Или объясненным по-другому, мне нужен простой старый объект JavaScript (который некоторые люди знают как «ассоциативный массив»), чьи содержащиеся в нем элементы могут быть отсортированы.
Редактировать 2: решение, которое я выбрал, это решение Анатолия, слегка измененное. По сути, я создаю массив, в котором дублирую «коллекцию» и сопоставляю два объекта (массив и коллекцию), чтобы получить преимущества обоих. Также спасибо Роатину Марту за то, что он указал, что итерирование объектов не гарантируется в любом порядке (я учел это при изменении решения Анатолия).