【问题标题】:Convert array of object with key value pair to a single object? [duplicate]将具有键值对的对象数组转换为单个对象? [复制]
【发布时间】:2020-09-23 10:07:17
【问题描述】:

我有一个带有键值对的对象数组,如何通过删除键将其减少为单个对象来将其转换为对象。我尝试使用 map filter reduce 但无法获得所需的结果。请帮忙

const object = Object.assign({}, ...obj); // not working
const result = {};

Object.keys(object).forEach((key, index) => {
    result[`newObj${index + 1}`] = obj[key].map(item => ({[key]: item}));
}); // not working

输入

   obj = [{key: name, value: jack},{key: age, value: 10},{key: country, value: india},{key: state, value: Delhi}];

输出

{name:jack, age:10, country:india, state: Delhi}

【问题讨论】:

  • obj 不是一个对象,它是一个 array 对象。如果您遍历该数组,它的每个项目都将是一个具有.key.value 属性的对象,您需要以某种方式使用它们。 obj.forEach(i => result[i.key] = i.value)
  • 请让您的输入有效,您的意思是{key:"name", ...} 而不是{key:name,...}
  • @JanStránský 是的
  • 很好,答案中有多少种不同的解决方案

标签: javascript


【解决方案1】:

使用forEach 和解构

更新:根据 Jan 指出的已修复。谢谢@Jan

obj = [
  { key: "name", value: "jack" },
  { key: "age", value: 10 },
  { key: "country", value: "india" },
  { key: "state", value: "Delhi" },
];

const res = {};
obj.forEach(({ key, value }) => Object.assign(res, { [key]: value }));

console.log(res);

或者,使用Object.fromEntriesmap

obj = [
  { key: "name", value: "jack" },
  { key: "age", value: 10 },
  { key: "country", value: "india" },
  { key: "state", value: "Delhi" },
];

const res = Object.fromEntries(obj.map(Object.values));

console.log(res);

【讨论】:

  • @JanStránský,你是对的。我刚更新。谢谢。
  • 我会将Object.fromEntries(obj.map(Object.values)) 解决方案作为第一个解决方案,将forEach 作为替代方案:-)
  • @sivako 这一行解决方案可以完成这项工作.. 谢谢
【解决方案2】:

var obj=[{key: "name", value: "jack"},{key: "age", value: 10},{key: "country", value: "india"},{key: "state", value: "Delhi"}]
    
var myObj={};
for (var item of obj){
    myObj[item.key]=item.value
} 
console.log(myObj)

会输出

{name: "jack", age: 10, country: "india", state: "Delhi"}

【讨论】:

    【解决方案3】:

    您可以为此使用reduce

    var input = [
        {key: "name", value: "jack"},
        {key: "age", value: 10},
        {key: "country", value: "India"},
        {key: "state", value: "Delhi"},
    ]
    var output = input.reduce((r,{key,value}) => ({[key]:value,...r}),{})
    console.log(output)

    输出

    { state: 'Delhi', country: 'India', age: 10, name: 'jack' }
    

    解决方案使用

    【讨论】:

      【解决方案4】:

      我想你想要这样……

      var obj = [
      {key: "name", value: "jack"},
      {key: "age", value: 10},
      {key: "country", value: "india"},
      {key: "state", value: "Delhi"}
      ];
      let tempObject = {};
      
      for (let c of obj) {
         tempObject[c.key]= c.value;
      }
      
      console.log(tempObject);

      【讨论】:

        猜你喜欢
        • 2018-08-07
        • 2022-11-17
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多