【问题标题】:How can I convert an array of objects into single object while keys of all the objects are same and value may differ当所有对象的键相同且值可能不同时,如何将对象数组转换为单个对象
【发布时间】:2020-07-08 19:13:31
【问题描述】:

我正在尝试转换:

var arr = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" }];
var obj = {}; //create the empty output object

arr.forEach(function (item, i) {                                                    
  var key = Object.keys(item)[0]; 
  obj[key] = item[key];  
});                                 

console.log("obj",obj);

这只会给我最后一个对象{name: "value3"}

预期的结果将是:

{ name: "value1", name : "value2", name: "value3" }

【问题讨论】:

  • 您想要的结果无效。对象中的键不能重复。充其量只能是{name:["value1", "value 2", "value 3"]}
  • 该数据结构的用例是什么?
  • 正如@Taplar 提到的,JavaScript 对象中的给定键不能有多个值。即使有可能,它也不会很有用......
  • 预期结果是不可能的,因为对象的键必须是唯一的。
  • @FranjoPintarić 我有用户详细信息,我想将所有用户的所有详细信息作为邮件发送,在这种情况下,所有用户都有相同的字段。我想将用户对象数组转换为一个对象和将它们作为一个对象发送

标签: javascript arrays javascript-objects


【解决方案1】:

根据上面的评论,您想要的输出对象不能有重复的属性,而是可以在一个数组中。

const arr = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" }];

const output = {};

// Iterate through each object in your array
arr.forEach(object => { 
  // For each entry in your object, in this case we only have name
  for(let [key, value] of Object.entries(object)) {
   
    // If the key's value isn't an array, we will assign a new one
    if(!Array.isArray(output[key])) {
      output[key] = [];
    }

    // Push the value to the output object key's array
    output[key].push(value);
  }
});

// Expected { name: ["value1", "value2", "value3"] }
console.log(output);

【讨论】:

    【解决方案2】:

    ES6 符号可以用作对象的相同属性名称。然而,每个符号都是独一无二的。现在,我能为您的问题找到的唯一解决方案是使用 Symbol 作为我们的密钥。因为一般对象不能有两个相同的键。

    看看下面的代码是否有帮助。

    const arrQuestion = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" 
    }];
    
    
    const ourObj = {};
    
    arrQuestion.forEach(obj => {
     let symbol = Symbol("name");
     ourObj[symbol] = obj.name;
    });
    
    console.log(ourObj);
    

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多