将包含对象的数组展平为 1 个对象

新手上路,请多包涵

给定输入:

 [{ a: 1 }, { b: 2 }, { c: 3 }]

如何退货:

 { a: 1, b: 2, c: 3 }

对于数组,lodash 不是问题,但这里我们有对象数组。

原文由 Szymon Toda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 293
2 个回答

使用 Object.assign

 let merged = Object.assign(...arr); // ES6 (2015) syntax

var merged = Object.assign.apply(Object, arr); // ES5 syntax

请注意, Object.assign 尚未在许多环境中实现,您可能需要对其进行 polyfill(使用 core-js、另一个 polyfill 或使用 MDN 上的 polyfill)。

您提到了 lodash,因此值得指出的是,它带有一个 _.assign 功能,用于此目的,做同样的事情:

  var merged = _.assign.apply(_, [{ a: 1 }, { b: 2 }, { c: 3 }]);

但我真的推荐新的标准库方式。

原文由 Benjamin Gruenbaum 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 lodash,您可以使用 merge()

 var arr = [ { a: 1 }, { b: 2 }, { c: 3 } ];
_.merge.apply(null, [{}].concat(arr));
// → { a: 1, b: 2, c: 3 }

如果您在多个地方执行此操作,则可以使用 partial()spread() 使 merge() 更优雅一些:

 var merge = _.spread(_.partial(_.merge, {}));
merge(arr);
// → { a: 1, b: 2, c: 3 }

原文由 Adam Boduch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题