如何使用 javascript 中的键将 JSON 对象映射到数组

How to map JSON Object to array with keys in javascript

关于这个主题大约有数百万个问题(和答案),但其中 none 正在做我需要做的事情。我有一个 JSON 对象,其中每个键的值都是一个对象。我想将其转换为数组并维护顶级键。

{
  "someKey1": {
    active: true,
    name: "foo"
  },
  "someKey2": {
    active: false,
    name: "bar"
  }
}

如果我使用 Object.keys() 我会得到顶级键,但不是它们的值。如果我使用 Object.values() 我会得到一个包含所有值的数组,但不是它们的键。我正在尝试使用键和映射,但只得到返回值:

const data = {
  "someKey1": {
    active: true,
    name: "foo"
  },
  "someKey2": {
    active: false,
    name: "bar"
  }
}
const items = Object.keys(data).map(function(key) {
    return data[key];
});

// returns [{active: true, name: foo},{active: false, name: bar}]

有没有办法同时获得两者?我想得到一个我可以迭代的数组,它看起来像这样:

[{
    key: someKey1,
    active: true,
    name: "foo"
},
{
    key: someKey2,
    active: true,
    name: "foo"
}]

OR

[
"someKey1": {
    active: true,
    name: "foo"
},
"someKey2": {
    active: false,
    name: "bar"
}
]

我认为您的方向是正确的,如果您想添加“键”属性您必须手动映射属性,对于第二个选项,因为您不需要“键” " 属性 可以做得更优雅一点:

对于第一个选项:

Object.keys(data).map(v => ({
    key: v,
    ...data[v]
}));

第二个选项更简单:

Object.keys(data).map(v => ({[v]: {...data[v]}}))

您可以轻松地将数据映射到新对象:

Object.keys(data).map(key => ({ ...data[key], "key": key }));