根据我的理解,函数式编程的特征之一就是我们处理可变对象的方式。
前任:
var notFunctionalFilter = function(objectArray) {
for (var i=0; i< objectArray.length; i++) {
if (objectArray[i].active) {
objectArray.splice(i, 1);
i --;
}
}
return objectArray;
};
var functionalFilter = function(objectArray) {
var filtered = [];
for (var i=0; i< objectArray.length; i++) {
if (objectArray[i].active) {
filtered.push(objectArray[i]);
}
}
return filtered;
};
我倾向于以“函数式”的方式编写越来越多的代码,因为它感觉更简洁(尤其是在使用漂亮的LoDash库的JS中,但这不是主题)。
实际上,最近有很多关于该主题的文章,例如非常好的一篇:函数式编程的实用介绍。
但是这里没有讨论过的东西是内存管理。这是我的问题:
functionalFilter
使用更多的内存notFunctionalFilter
?filter
函数时应考虑到这一点?谢谢
除了一点点,但您的功能过滤器应如下所示:
var functionalFilter = function (item) { return item.active; };
并像这样使用: var filtered = objectArray.filter(functionFilter);
关于“ functionalFilter”的唯一“功能”是它没有副作用。函数式编程和函数式JS不仅限于此。
至于记忆。是的,它使用更多……也许……有点。我假设您要基于名称传递对象数组。使用内置Array.filter
函数将最大限度地减少这种情况,但是在您的代码中,额外的内存占用很小。
JS中的对象通过引用传递,这意味着您的新数组仅仅是指向原始对象的指针的数组。(警告:这意味着也要filtered
更改它们objectArray
。除非进行深度克隆,否则)。数组包装器相对较小,可能甚至不值得在内存方面谈论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句