Javascript对象按键排序

时间:2017-05-29 09:41:43

标签: javascript json sorting

javascript对象如何按键的升序排序?

我第一次注意到它。

/* It does maintain a order. The order in which you inserts the value. And if it does not maintain any orders, please show me example, that will be really helpful to understand me the concepts.

Thanks in advance.
*/

var a = {"13" : "1", "15" : "2", "14" : "3", "12" : "4"};

console.log(JSON.stringify(a)); /* This is nothing to do with for loop */ 

for(let i in a) {
	console.log(i + " = " + a[i]);
}
/* But the keys other than numbers are not sorting. */
var b = {"c" : "1", "a" : "2", "b" : "3", "d" : "4"};

for(let i in b) {
	console.log(i + " = " + b[i]);
}

第一个对象是自己排序的。我正在为两个对象创建键作为字符串。但第二个目标不是排序。

2 个答案:

答案 0 :(得分:3)

此行为现在是JavaScript standard

的一部分
  
      
  1. 对于每个自己的属性键P,O是一个整数索引,按升序数字索引顺序

         

    一个。添加P作为键的最后一个元素。

  2.   
  3. 对于每个属性的键P,它是一个String但不是整数索引,在属性创建顺序中

         

    一个。添加P作为键的最后一个元素。

  4.   

以下是详细说明:

http://2ality.com/2015/10/property-traversal-order-es6.html

简而言之,理由如下:

  • 从逻辑上讲,订单非常重要,程序员应该依赖它。
  • 然而,大多数浏览器产生确定性的顺序,而程序实际上依赖于此顺序。如果浏览器改变了他们的订单,一些程序开始"打破"。
  • 以下是解决此问题的两种不同方法:
    • 在标准中承认订单是确定性的 - 以便程序员可以正确地依赖它。
    • 强制程序员通过在每次运行程序时生成不同的顺序来理解此问题。
  • 从历史上看,第二种解决方案更容易实现(至少,这是我在使用Perl时所记得的)。但今天,第一种选择更容易。
  • 因此,标准化机构决定将确定性订单作为标准的一部分。

答案 1 :(得分:0)

我发现this answer与您提出的问题有关。

引用:

  

这是v8处理关联数组的方式。已知问题问题164   但它遵循规范,因此标记为按预期工作'。那里   不是循环关联数组所需的顺序。

     

一个简单的解决方法是在数字值前加上字母,例如:   ' size_7':[' 9149',' 9139']等。

     

标准将在下一个ECMAScript规范中改变[chrome]   开发人员要改变这一点。