javascript - 使用 .map() 而不是 .forEach 来创建对象
问题描述
这是代表较大数据集的一小部分数据:
const data = [
{ id: 32, minimum: 200, maximum: 400 },
{ id: 16, minimum: 370, maximum: 390 },
{ id: 85, minimum: 700, maximum: 950 }
];
id
需要使用作为键并以最小值和最大值作为值从该数据创建对象,如下所示:
当前创建此对象的方法如下 -
let object = {};
data.forEach(o => {
object[o.id] = { min: o.minimum, max: o.maximum }
});
console.log(object);
虽然这可行,但似乎应该有一种更简洁的方式来编写这段代码。
我已经尝试过.map()
-
const obj = data.map(o => ({[o.id]: { min: o.minimum, max: o.maximum }}));
console.log(obj);
但输出格式不正确 -
应该在.map()
版本中进行哪些更改以实现所需的输出格式?
解决方案
// mapper simply creates the object that you want from the one that you have - id as the key and min and max are the values
const mapper = ({ id, minimum: min, maximum: max }) => ({ [id]: { min, max } });
const obj = data.reduce((acc, obj) => ({
...acc,
...mapper(obj)
}), {});
编辑:
虽然 reduce 是做到这一点的正确方法——你正在将一个数组归约为一个单一的东西,但 JavaScript 允许你以多种方式做事。这是使用 map 和的替代解决方案Object.assign
:
const mapper = ({ id, minimum: min, maximum: max }) => ({ [id]: { min, max } });
const obj = Object.assign(...data.map(mapper));
推荐阅读
- javascript - Vue 动态路由在手动导航或页面刷新时不显示内容
- c++ - 如何在编译过程中自动在 Visual Studio 中生成相应的 protobuf 文件?
- vis.js - 更改节点形状
- python - 在 Python 脚本上应用源来导出环境变量?
- java - Linux 上使用 System.getProperty("line.separator") 的查询
- python - 直接将图像numpy数组转换为灰度数组而不保存图像
- html - 无法在 iOS Swift 中将 html 数据的新段落显示到 Textview 中
- java - 在 Windows 中使用 SystemCommandTasklet 拆分大文件
- flutter - 如何使用 Flutter 将 Json 中的值添加到列表对象中?
- python - Python数据框中的名称可以同时具有两个值