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

How to convert object into array of objects

我有一个 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 代码实现此目的的正确方法是什么?

谢谢。

"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": ""
        }
]

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

您预期的输出在 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);