![](/img/trans.png)
[英]Is there a way to solve this problem by using .forEach or .map instead of for-loop?
[英]using .map() instead of .forEach for creating an object
这是代表较大数据集的一小部分数据:
const data = [
{ id: 32, minimum: 200, maximum: 400 },
{ id: 16, minimum: 370, maximum: 390 },
{ id: 85, minimum: 700, maximum: 950 }
];
需要使用id
作为键并使用 min 和 max 作为值从该数据创建 object,如下所示:
当前创建此 object 的方法如下 -
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);
但 output 的格式不正确 -
应该在.map()
版本中进行哪些更改以实现所需的 output 格式?
// 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));
您可以获取Object.fromEntries
和 map 条目。
const data = [{ id: 32, minimum: 200, maximum: 400 }, { id: 16, minimum: 370, maximum: 390 }, { id: 85, minimum: 700, maximum: 950 }], result = Object.fromEntries( data.map(({ id, minimum: min, maximum: max }) => [id, { min, max }]) ); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.