-3

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

谢谢。

4

3 回答 3

1

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

于 2018-08-28T09:31:27.653 回答
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)
}, []);
于 2018-08-28T08:54:57.090 回答
-1

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

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

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

于 2018-08-28T09:00:18.390 回答