【发布时间】:2019-08-31 07:34:42
【问题描述】:
我有一个项目数组:
const arr = [
{ id: 'abc', value: 2 },
{ id: 'def', value: 3 },
];
我想通过id创建一个项目对象:
const obj = {
abc: { id: 'abc', value: 2 },
def: { id: 'def', value: 3 },
};
据我所知,最高效、最简洁的方法是通过Array.prototype.reduce
const obj = arr.reduce((obj, entry) => {
obj[entry.id] = entry;
return obj;
}, {});
是否有更高效和更简洁的方式来执行操作?它们是什么?
我知道这是相对主观的,我愿意接受如何更好地表达这个问题的建议。谢谢。
【问题讨论】:
-
“performant”和“concise”有时会互相交换。
.reduce()方法涉及每个数组元素的函数调用,而简单的for循环则不会。 -
@Pointy 我相信 V8 引擎可能会优化并将函数转换为 C++ 中的低级关系,但这是随机猜测
-
确实;除非规模很大,否则担心这样的事情通常是不值得的,然后算法优化通常比实现优化更有价值。
-
就像“Erlang 先生”Joe Armstrong 常说的那样:“尽你所能写出最漂亮的代码。”
标签: javascript ecmascript-6 iteration