如何将对象转换为对象数组



>我有一个 JavaScript 对象,我想将其转换为对象数组

{
"mongo": {
"status": true,
"err": ""
},
"redis": {
"status": true,
"err": ""
},
"rabbitmq": {
"status": true,
"err": ''
}
}

预期输出必须为

[
"mongo": {
"status": true,
"err": ""
},
"redis": {
"status": true,
"err": ""
},
"rabbitmq": {
"status": true,
"err": ""
}
]

使用javascript代码实现这一目标的正确方法是什么?

谢谢。

你的预期输出在javascript中语法不正确。JS 数组只能有从 0 开始的数字索引。在预期的输出中,您显示了字符串键。

语法和对称正确的输出将是:

[
{
"name": "mongo",
"status": true,
"err": ""
},
{
"name": "redis",
"status": true,
"err": ""
},
{
"name": "rabbitmq",
"status": true,
"err": ""
}
]

JS代码来实现这一点:

var obj = {
"mongo": {
"status": true,
"err": ""
},
"redis": {
"status": true,
"err": ""
},
"rabbitmq": {
"status": true,
"err": ''
}
};
var arr = [];
for (key in obj) {    
arr.push(Object.assign(obj[key], {name: key}));
}
console.log('sdf', arr);

"mongo": {
"status": true,
"err": ""
}

在这方面并不是真正的对象或有效语法。你可以有

[
{
"status": true,
"err": ""
},
{
"status": true,
"err": ""
},
{
"status": true,
"err": ""
}
]

由此

Object.keys(obj).reduce((arr, key)=>arr.concat(obj[key]), []);

假设obj是你的对象和你可以自由使用的ES6语法。或者你可以有这个:

[
{
"mongo": {
"status": true,
"err": ""
}
},
{
"redis": {
"status": true,
"err": ""
}
},
{
"rabbitmq": {
"status": true,
"err": ""
}
}
]

由此:

Object.keys(obj).reduce((arr, key)=>{
const subObj = {[key]: obj[key]};
return arr.concat(subObj)
}, []);

不正确的预期输出,正如你提到的,它不是一个数组 它可以如下:

[
{
"name": "mongo",
"status": true,
"err": ""
},
{
"name" : "redis",
"status": true,
"err": ""
},
{
"name" : "rabbitmq",
"status": true,
"err": ""
}
]

要获得这样的输出,您必须为此编写一个自定义函数。

最新更新