Преобразование объекта в массив объектов

#javascript

#javascript

Вопрос:

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

 {
  "name1" : "value1",
  "name2" : "value2",
  "name3" : "value3",
  "name4" : "value4",
}
  

Я хочу изменить преобразовать это в

 [
  {"name1" : "value1"},
  {"name2" : "value2"},
  {"name3" : "value3"},
  {"name4" : "value4"},
[
  

Я пытался использовать

 Object.keys(result).forEach(function(key) {
      console.log(key, result[key]);
      let item = key;
      policyStatusList.push(
          new Object({
          item: result[key]
          })
     );
});
  

но в итоге получилось так

 [
  {"item" : "value1"},
  {"item" : "value2"},
  {"item" : "value3"},
  {"item" : "value4"},
[
  

Есть предложения?

Комментарии:

1. используйте policyStatusList.push({[ключ]: результат [ключ]}) , и нет необходимости в item = key , в остальном все в порядке. В вашем коде элемент будет приниматься как строка, а не как переменная, если вы хотите передать переменную в качестве ключа в объекте, вам нужно использовать [key];

2. Нет, вы этого не хотите.

3. @AZ_ итак, очевидно, мне просто нужно было добавить скобки к элементу спасибо; спасибо за помощь всем, приму ответ CertainPerformance, хотя, поскольку он намного эффективнее, чем мой текущий код

4. @RaphaelEstrada да, ваш код неэффективен, просто указываю, что не так.

Ответ №1:

.map Object.entries объекта:

 const obj = { "name1" : "value1", "name2" : "value2", "name3" : "value3", "name4" : "value4" };
const arrOfObjs = Object.entries(obj).map(([key, val]) => ({ [key]: val }));
console.log(arrOfObjs);  

Ответ №2:

Вы могли бы использовать методы reduce и concat .

 var obj = { "name1" : "value1", "name2" : "value2", "name3" : "value3", "name4" : "value4" }
var res = Object.keys(obj).reduce((result, item) => result.concat([{[item] : obj[item]}]), []);
console.log(res);  

Ответ №3:

Попробуйте:

 const obj = {
  "name1" : "value1", 
  "name2" : "value2", 
  "name3" : "value3", 
  "name4" : "value4" 
};
const convertedArray = Object.entries(obj).map(([key, val]) => ({
    [key]: val 
}));
console.log(convertedArray);
  

Ответ №4:

Я хочу изменить convert это на …

Нет, вы, вероятно, этого не хотите. Структура данных, возвращаемая API, великолепна, потому что

1) Вы можете легко получить значение для определенного ключа, например obj.name1

2) Вы можете легко получить все ключи ( Object.keys(obj) ), значения ( Object.values(obj) ) и пары ключ-значение ( Object.entries(obj) ) для повторения.

Со структурой данных, которую вы «хотите» получить, вы не можете ни:

1) найдите значение, поскольку вам пришлось бы перебирать массив и искать ключ в каждом объекте, что действительно медленно и некрасиво.

2) Выполните итерацию по ключам, значениям и парам ключ-значение, поскольку вам пришлось бы извлекать ключ и значение из каждого объекта, что сложно.

Так что нет, вы этого не хотите.

Ответ №5:

Ваша проблема в том, что вы создаете свой новый объект с помощью ключа item — вы хотите использовать ключ [item] (значение именованной переменной item , а не буквальную строку item ):

 const result = {
  "name1" : "value1", 
  "name2" : "value2", 
  "name3" : "value3", 
  "name4" : "value4" 
};

let policyStatusList = [];

Object.keys(result).forEach(function(key) {
  let item = key;
  policyStatusList.push(
    new Object({
      [key]: result[key]
    })
  );
});

console.log(policyStatusList);