【问题标题】:How to sort object elements in javascript? [duplicate]如何在javascript中对对象元素进行排序? [复制]
【发布时间】:2012-08-01 14:37:32
【问题描述】:

可能重复:
Sorting a JavaScript object
Sort JavaScript object by key

我有数组:

var arr = {}
arr[2323] = 1
arr[123] = 1
...
arr[n+232323] = 1

如何获取一个对象的所有元素按键排序(数字顺序?)

for ( key in arr ) {
     alert(typeof(key))
}

返回字符串类型。

【问题讨论】:

  • 你的意思是对象,因为在 javascript 中没有所谓的关联数组
  • 人们回答说您无法对这些内容进行排序这一事实让我感到有些困扰,很明显,如果所有键都是数字的,则可以对其进行排序。也许他希望遍历键(按数字顺序),以便将它们加载到键相距不太远的新对象中。
  • 对象不能直接排序,但是“我不是”的答案会在对象中提供keynames的有序列表,因此可以在分离中调用它们。

标签: javascript


【解决方案1】:

这不是一个关联数组,这是一个对象。 javascript 中没有关联数组。

此外,对象没有排序。对象中键的顺序是没有意义的。

【讨论】:

    【解决方案2】:

    假设你一开始不使用数组是有原因的,你可以得到一个包含可枚举对象属性的数组,然后对该数组进行排序...

    var sorted = Object.keys(my_obj)
                       .sort(function(a,b) {
                                return a - b;
                             });
    

    这假设键是数字的。

    然后你可以迭代Array,并使用每个键从@9​​87654322@...中获取值...

    sorted.forEach(function(key) {
                       console.log(my_obj[key]);
                   });
    

    【讨论】:

    • keys 在这种语言中的定义是 strings。所以你应该parseInt 或使用+keyname 或在ab 字符串上调用.localeCompare
    • @jAndy:“数字”与“数字”不同。您可以有数字字符串。我只是说我的排序是假设需要数字排序。
    • 请注意,这将返回一个有序数组,列出您要访问的对象的键名。
    • 当然可以,但我认为这是恶业。你不应该把它留给正确转换东西的黑魔法。
    • @amnotiam:是的,我完全同意Object.keys.sort(),我也会这样做。只是(hopefully castable) - (hopefully castable) 让我有点恼火,因为这个问题的简单解决方案:p
    【解决方案3】:

    简答:你不能。

    长答案:JavaScript 中的关联数组实际上是 JavaScript 对象。当您添加一个新元素时,您实际上是在向该对象添加一个新成员。虽然大多数浏览器会按照添加的顺序枚举这些成员,但标准规定顺序是未定义的。您无法对未定义的内容进行排序。

    【讨论】:

      【解决方案4】:

      JavaScript 对象(地图/字典/关联数组)没有顺序,您无法对它们进行排序。您需要先将其转换为数组。由于您在循环中只需要对象的键,因此 Object.keys() function(对于旧版浏览器可能需要一个 shim)用于该任务:

      var obj = {...};
      var keys = Object.keys(obj).sort(function(a,b){return a-b;}); // numerically sorted
      for (var i=0; i<keys.length; i++) {
          alert(keys[i]);
          // access the values by obj[keys[i]]
      }
      

      【讨论】:

        猜你喜欢
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 2020-05-18
        相关资源
        最近更新 更多