Javascript stringify是否保留数组中对象的顺序

Javascript stringify是否保留数组中对象的顺序,javascript,json,Javascript,Json,我正在创建一个javascript对象,如下所示 var myObjects ; for(var i = 0; i <10;i++){ var eachObject = {"id" : i}; myObjects .push(eachObject ); } message = { "employeeDetails" : myObjects } JSON.stringify(message); 上述方法是否按照以前的顺序对对象进行字符串化? 字符串化后,它

我正在创建一个javascript对象,如下所示

var myObjects ; 
for(var i = 0; i <10;i++){
    var eachObject = {"id" : i};
    myObjects .push(eachObject );
}
message = {
      "employeeDetails" : myObjects 
}
JSON.stringify(message);
上述方法是否按照以前的顺序对对象进行字符串化?
字符串化后,它们的顺序是否会像以前一样为0,1,2…9?

您可以使用

是的,严格遵守秩序


文档中没有明确确认保留了数组项的顺序。但是,文档中指出,对于非数组属性,不能保证顺序:

非数组对象的属性不保证按任何特定顺序进行字符串化。不要依赖于字符串化中同一对象内属性的排序


即使保留数组项的顺序,我也不会指望这样做,而是自己对这些项进行排序。毕竟,很可能会有一些业务逻辑或表示逻辑指示如何对项目进行排序。

要从JSON.stringify()中以特定顺序获取顶级对象,可以使用:

const str = JSON.stringify(obj, Object.keys(obj).sort());
作为替换项传递的键[]的顺序决定了结果字符串中的顺序

请参阅:和“排序对象属性和JSON.stringify”——

另一个更严格的方法是:

和:将按键顺序输出。您还可以使用自己的排序顺序功能


我在谷歌搜索了很多次后发现了这一点。

是什么阻止你在web浏览器中打开JavaScript控制台并尝试这一点?你可以很容易地尝试一下:
JSON.parse(JSON.stringify([0,1,2,3,4,5,6,7,8,9])
上面发布的只是一个虚拟对象。我有一个巨大的数组,它包含3000多个对象,而且我不能通过肉眼观察来判断它们是否处于特定的顺序,因为它们不能包含任何索引(一个唯一的东西来标识其顺序)。它不会改变任何东西,无论你是处理大型对象还是虚拟对象。如果上面由George Stocker或Cerburs提出的测试给您带来了令人满意的结果,那么您应该在真实对象上实现同样的结果,不管它有多长。这个问题似乎离题了,因为它可以用几行代码简单地进行测试。事实上,非数组是显式非有序的,暗示数组是有序的。可以假设这是肯定的,但是没有明确说明,所以我会谨慎使用。如果在文档中提到这一点,那就太好了。根据我的经验,JSON.stringify有时确实会更改数组中元素的顺序。它是根据键的长度排序的。我用的是铬。我想没有办法根据键对对象数组进行排序。@UzumakiNaruto不,这是巧合。它是按ASCII顺序排序的。所有大写字母在小写字母之前。试着把“法拉利”改成“费瑞”,或者把“沃尔沃”改成“博沃”,看看行为上的不同。谢谢!!!这是一个惊人的解决方案。
const str = JSON.stringify(obj, Object.keys(obj).sort());