我正在创建一个 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 吗?
文档中没有任何内容明确确认数组项的顺序被保留。但是,文档指出,对于非数组属性,不保证顺序:
不保证非数组对象的属性按任何特定顺序进行字符串化。不要依赖字符串化中同一对象内属性的排序。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
即使数组项目的顺序被保留,我也不会指望这一点,而是自己对项目进行排序。毕竟,很可能会有一些业务或表示逻辑来指示项目应如何排序。
对于从
JSON.stringify()
以特定顺序(仅)获取顶级对象的简单方法,您可以将 Object.keys()
与 JSON.stringify
的 replacer
参数:
const str = JSON.stringify(obj, Object.keys(obj).sort());
演示:
let obj = {
cat: 1,
a: 2,
ba: 3,
bb: 3.5,
A: 4,
'0': 5,
};
const str = JSON.stringify(obj, Object.keys(obj).sort(), 2);
// Output is sorted alphabetically by key name
console.log(str);
.as-console-wrapper { max-height: 100% !important; }
作为
replacer
传递的键数组的顺序决定了结果字符串中的顺序。
但是请注意,正如上面提到的,使用
Object.keys(obj).sort()
仅保留顶级对象键,这意味着 字符串化结果将省略所有嵌套值。
例如
{ test: { a: "I'm nested!" } }
将变为 {"test":{}}
。
另请参阅:
您可以使用 sort 方法对数组进行排序。
是的,stringify 保留了排序。
var cars = ["Saab", "Volvo", "BMW"];
cars.push("ferrari");
alert(JSON.stringify(cars));
cars.sort();
alert("sorted cars" + JSON.stringify(cars));