JavaScript:排序集合,不是数组

sim*_*mon 1 javascript arrays sorting object

我在JavaScript中有一组对象,如下所示:


Object collection = new Object();
collection[123] = new Item(); //another object
collection[425] = new Item();
collection[2134] = new Item();
//etc. etc.

//TODO: sort items

Run Code Online (Sandbox Code Playgroud)

我想根据集合中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
Run Code Online (Sandbox Code Playgroud)

现在集合很好地排序 - 但是,我无法使用属性访问项目,我曾经用它来设置它们,即


collection[2134]
Run Code Online (Sandbox Code Playgroud)

是null,因为JS数组不包含那么多元素(即使它会,它的结果也不会如预期的那样)

我需要的是

  • 能够直接使用我设置的数字属性访问集合中的元素(当不使用JS数组时已经是给定的)
  • 能够对集合中的项目进行排序

编辑:对象不需要像数组一样运行,也不是自然数组.我需要的是非常接近Java TreeMap - 一个集合,它维护一个特定的顺序,也是一个地图.或者以另一种方式解释,我需要一个普通的旧JavaScript对象(有些人称之为"关联数组"),其包含的用户创建的元素可以被排序.

编辑2:我最终使用的解决方案是Anatoliy,稍加修改.基本上我创建了一个数组,我在其中复制"集合"并映射两个对象(数组和集合)以获得两者的好处.还要感谢Roatin Marth指出迭代对象不能保证以任何顺序发生(我在修改Anatoliy的解决方案时考虑过这一点).

Roa*_*rth 8

从哪儿开始...

最后一点是你问题的关键.恕我直言,您需要将数据类型从对象更改为Array(可以维护排序顺序,因此sort可用方法).