Как преобразовать объект в массив объектов - PullRequest
0 голосов
/ 28 августа 2018

У меня есть объект 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 голосов
/ 28 августа 2018

неверный ожидаемый вывод, как вы упомянули, это не массив это может быть следующим образом:

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

и чтобы получить такой вывод, вы должны написать для этого пользовательскую функцию.

0 голосов
/ 28 августа 2018

Ваш ожидаемый вывод не является синтаксически правильным в 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);
0 голосов
/ 28 августа 2018
"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)
}, []);
...