【发布时间】:2017-02-18 05:41:04
【问题描述】:
我有一个像这样的索引映射:
var idxMapping = {
abc: 1,
foo: 2,
bar: 0
};
还有一个对象数组:
var data = [{
id: 'abc',
info1: 'random info 1',
info2: 'random info 2',
}, {
id: 'foo',
info1: 'random info 1',
info2: 'random info 2',
}]
使用函数式编程范例,我如何创建一个新数组,以便根据 idxMapping 中指定的索引转换数据。
结果应该类似于:
[
null,
{
id: 'abc',
info1: 'random abc info 1',
info2: 'random abc info 2'
},
{
id: 'foo',
info1: 'random foo info 1',
info2: 'random foo info 2'
}
]
第一个元素为空,因为数据数组不包含任何映射到索引 0 的数据(即本例中的 No bar 对象)。
这就是我使用 forEach 循环实现的方式:
var result = [];
for (var key in idxMapping) {
result.append(null);
}
data.forEach(function(item) {
result[idxMapping[item.id]] = item;
});
我需要一个严格遵循函数式编程范例的解决方案。
【问题讨论】:
-
展示你想要做的事情,如果你知道如何用循环来做,也展示出来。
-
您是否意识到您得到的答案比您现有的代码差很多(在可读性和效率方面)?
-
@georg 我刚开始使用 FP,并希望重构我现有的项目以使其尽可能实用。但是,我仍然有点不确定 FP 何时是过度杀伤力。这个问题是我实际问题的一部分。我需要这部分代码在另一个两级嵌套映射函数中。我是 FP 的初学者,可能会过度使用 FP。你能指点一下我应该选择命令式编程而不是函数式编程吗?
-
@jgr0:JS 内置的“函数式工具”很差,如果你想“品尝”真正的函数式编程,我建议学习ramda。同时,只需使用最简单的方法——在这种情况下,一个简单的循环就可以了。
标签: javascript arrays functional-programming lodash data-manipulation