我正在创建一个javascript对象,如下所示
var myObjects ;
for(var i = 0; i <10;i++){
var eachObject = {"id" : i};
myObjects .push(eachObject );
}
message = {
"employeeDetails" : myObjects
}
在此之后我将它们按字符串化如下
JSON.stringify(message);
上述方法是否按照先前的顺序对对象进行字符串化? 在stringify之后,它们将按照之前的顺序为0,1,2 .... 9?
答案 0 :(得分:12)
文档中没有任何内容明确确认数组项的顺序是保留的。但是,文档声明对于非数组属性,无法保证顺序:
不保证非数组对象的属性按任何特定顺序进行字符串化。不要依赖于字符串化内同一对象内的属性排序。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
即使数组项的顺序会被保留,我也不会指望这个,而是自己对项目进行排序。毕竟,很可能会有一些业务或表示逻辑指示如何对项目进行排序。
答案 1 :(得分:4)
您可以使用sort method.
对数组进行排序是的,stringify保留了订购。
var cars = ["Saab", "Volvo", "BMW"];
cars.push("ferrari");
alert(JSON.stringify(cars));
cars.sort();
alert("sorted cars" + JSON.stringify(cars));
答案 2 :(得分:1)
对于从JSON.stringify()中以特定顺序获取顶级对象的简单方法,您可以使用:
const str = JSON.stringify(obj, Object.keys(obj).sort());
作为replacer
传递的键[]的顺序决定了结果字符串中的顺序。
请参阅:https://dev.to/sidvishnoi/comment/gp71和“排序对象属性和JSON.stringify”-https://www.tfzx.net/article/499097.html
另一种更严格的方法是:https://github.com/develohpanda/json-order
并且:https://www.npmjs.com/package/fast-json-stable-stringify将按键顺序输出。您还可以使用自己的排序顺序功能。
经过大量Google搜索后,我发现了这一点。