从对象数组中创建一个新对象[重复]
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.field
和element.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);
【讨论】:
以上是关于从对象数组中创建一个新对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章