【问题标题】:How to "reset" object's property order? JSON.stringify() preserves them如何“重置”对象的属性顺序? JSON.stringify() 保留它们
【发布时间】:2017-09-09 23:09:59
【问题描述】:

两个相同的对象,唯一的区别是属性顺序:

const obj1 = {aaa: 1, bbb: 2, ccc: 3};
const obj2 = {ccc: 3, aaa: 1, bbb: 2};

现在如果我使用 JSON.stringify() 它将保持顺序并产生:

{"aaa":1,"bbb":2,"ccc":3}
{"ccc":3,"aaa":1,"bbb":2}

有没有办法“重置”对象的属性顺序? 比将所有 Object.keys() 放入一个数组,然后按字母顺序排序,然后创建空对象并一个一个地添加每个属性更优雅的东西..?

附:我知道有更好的方法来比较两个对象,但事实并非如此。

【问题讨论】:

  • 您为什么需要/想要这样做?我们从不通过 JS 中的“位置”从对象中获取值,那么顺序有什么关系呢?
  • @gforce301 获得规范化 JSON.stringify结果时对象键的顺序很重要。猜猜为什么json-stable-stringify 的使用率这么高。
  • @gforce301 但是,确实,根据对象键的顺序,应该在 Javascript 中避免,因为 按设计 Javascript 不能保证订单。

标签: javascript json properties stringify


【解决方案1】:

不,除了将键放入数组之外,别无他法。原因是 JavaScript 对象的键没有任何有意义的顺序。

JavaScript 对象本质上是哈希映射,这意味着给定任何键都有恒定的查找时间,但键本身没有有意义的顺序。由于在 JavaScript 中对键进行排序的唯一原因是为了便于阅读,因此没有一个内置的解决方案可以更好地处理这个问题。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2014-08-06
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多