繁体   English   中英

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

[英]How to map JSON Object to array with keys in javascript

关于这个主题有大约数百万个问题(和答案),但没有一个在做我需要做的事情。 我有一个 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"
}
]

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

对于第一个选项:

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 }));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM