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

时间:2018-08-28 08:29:51

标签: javascript high-level

我有一个要转换为对象数组的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代码实现此目标的正确方法是什么?

谢谢。

3 个答案:

答案 0 :(得分:0)

"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)
}, []);

答案 1 :(得分:0)

如前所述,

预期输出不正确,它不是数组 可以如下:

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

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

答案 2 :(得分:0)

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