从对象数组中创建一个新对象[重复]

Posted

技术标签:

【中文标题】从对象数组中创建一个新对象[重复]【英文标题】:Make a new object from an array of objects [duplicate] 【发布时间】:2017-05-07 09:56:51 【问题描述】:

这可能是重复的,但在我搜索的任何地方,我似乎只能找到想要创建对象数组的人。 基本上我试图实现相反的效果,将对象数组的某些值拉到一个对象中。这有点让我头疼,所以你们中的任何一位 JS 大师如果能帮我一把,将非常感激!

基本上我有一个这样的对象数组:

[
  field: 'name', value: 'sam', isRequired: true ,
  field: 'email', value: 'sam@dummyemail.net', isRequired: true ,
  field: 'message', value: 'hey', isRequired: false ,
]

他们以这种方式分开是因为我通过字段进行验证。

在验证阶段之后,我想将字段和值属性映射到新对象中的名称值对,例如:


 name: 'sam',
 email: 'sam@dummyemail.net',
 message: 'hey',

就像我说的任何帮助都会很棒!干杯。

【问题讨论】:

循环遍历数组的每个元素。获取element.fieldelement.value 并将它们用作结果对象中新属性的名称和值。其中哪一部分很难做到? var result = array.reduce((final, obj) => (final[obj.field] = obj.value, final), ); 我猜只是实现,我会使用 Object.assign 然后在其中使用 map 循环吗?另外,如果这是重复的,您能否指出我找不到的原始问题?谢谢 这是reduce 的用例,正如上面评论中所建议的那样。 谢谢@Guedes,是的。有谁知道为什么现在很多人似乎更喜欢使用 ES6 的 Object.assign 方法?我很少看到在这种情况下提到 reduce? 【参考方案1】:

Array#map 将数组中的每个对象转换成一个新对象,field 作为属性的键,值,嗯,属性的值。然后使用spread syntax 和Object#assign 将新的对象数组组合到对象:

const arr = [
  field: 'name', value: 'sam', isRequired: true ,
  field: 'email', value: 'sam@dummyemail.net', isRequired: true ,
  field: 'message', value: 'hey', isRequired: false ,
];
  
const result = Object.assign(, ...arr.map(( field, value ) => ( [field]: value )));

console.log(result);

【讨论】:

谢谢这是我试图实现的方法,只是不太确定如何实际实现 Object.assign 例如,使用空对象和扩展运算符。谢谢!【参考方案2】:

你可以像这样将数组映射到对象中

var array = [
  field: 'name', value: 'sam', isRequired: true ,
  field: 'email', value: 'sam@dummyemail.net', isRequired: true ,
  field: 'message', value: 'hey', isRequired: false ,
];
var object = ;
array.forEach(x => 
  object[x.field] = x.value;
);
console.log(object);

【讨论】:

以上是关于从对象数组中创建一个新对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在数组中创建一个新对象

Array.from()方法:通过给定的对象中创建一个数组

在对象中创建一个具有不同数组元素的新数组[关闭]

比较 2 个对象以在 javascript 中创建一个新的对象数组

javascript 从对象数组中创建对象

从数组中创建集合,其中包含自定义对象的数组