【问题标题】:JavaScript reorder object properties given an array of properties [duplicate]给定属性数组的JavaScript重新排序对象属性[重复]
【发布时间】:2019-12-10 03:23:43
【问题描述】:

我有一个 javascript 对象,例如:

{
  a: 3,
  b: 10,
  c: 2,
  d: 7,
}

我有一个包含属性名称的字符串表示形式的数组:

[ "c", "b", "a", "d" ]

如何重新排列我的对象,使属性的排列顺序与数组中的顺序相同,例如:

{
  c: 2,
  b: 10,
  a: 3,
  d: 7,
}

【问题讨论】:

  • 对象中属性的顺序是任意的。这里的实际目标是什么?
  • 您必须构造一个新对象并按您想要的顺序添加属性。但是我强烈建议您重新考虑依赖对象属性排序的编码策略,因为它会使您的代码非常脆弱。
  • 你可以对数组进行排序以匹配对象属性顺序吗?
  • 为什么不把数组作为有序访问器呢?
  • 这看起来真的很像XY Problem。你的实际用例是什么?

标签: javascript arrays object


【解决方案1】:

尽管 ECMAScript-6 改进了该功能,但众所周知,对象属性仍然是无序的。解决此问题的一种方法是使用能记住原始键插入顺序的 Map。

    const obj = { a: 3, b: 10, c: 2, d: 7 };
const arr = ["c", "b", "a", "d"];

const res = new Map(arr.map(e => [e, obj[e]]));

for (let [key, value] of [...res]) {
  console.log(key, value);
}

for...of 循环只是为了显示实际的地图,因为它们没有显示在 Stack Snippets 控制台上。)

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 2012-08-16
    • 2013-03-13
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多