我可以依靠JSON数组的顺序吗?

时间:2017-01-22 17:39:01

标签: javascript json

很明显,我不能依赖JSON中键值对的排序。例如,JSON解析器可以解释

{
    "someKey" : "someValue",
    "anotherKey" : "anotherValue",
    "evenAnotherKey" : "evenAnotherValue"
}

作为

{
    "anotherKey" : "anotherValue",
    "someKey" : "someValue",
    "evenAnotherKey" : "evenAnotherValue"
}

合法,但我可以依赖JSON 数组的排序吗?例如,JSON解析器是否可以解释

{
    "arrayKey" : ["firstElement", "secondElement", "thirdElement"]
}

作为

{
    "arrayKey" : ["secondElement", "firstElement1", "thirdElement"]
}

合法?我不会,但我的朋友告诉我,我不对。

2 个答案:

答案 0 :(得分:5)

是的,你可以!制作阵列,以便顺序重要!这就是将对象与数组分开的原因。特别是在JS和JSON中。

答案 1 :(得分:3)

总是订购数组和列表。这就是拥有数组和列表的重点 - 他们的位置 是他们的索引。

顺便说一下,由于ES5对象的顺序(你称之为键值对)也是有保证的。但不是直截了当的。

对于对象,任何数字键都将在非数字键之前排序,并以数字方式排序。但所有其他密钥都保证按插入顺序排列。所以以下对象:

{
  hello : "world",
  foo : "bar",
  "22" : "first"
}

必须以:

返回
{
  "22" : "first",
  hello : "world",
  foo : "bar"
}

目前所有浏览器都支持此功能,而node.js支持此功能,但并非所有javascript交叉编译器(如Babel)都支持此功能。

就我个人而言,我不喜欢像对象一样对待像对象这样的无序数据结构。但看起来js社区不同意。例如,故意随意地对地图的顺序进行随机化,以防止人们依赖于语言实现中的任何意外稳定排序。