【问题标题】: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?

标签: javascript arrays object ecmascript-6


【解决方案1】:

Array#map 将数组中的每个对象转换成一个新对象,field 作为属性的键,值,嗯,属性的值。然后使用spread syntaxObject#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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 2015-10-06
    • 2021-07-23
    • 1970-01-01
    • 2021-03-30
    • 2019-02-28
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多