如果您尝试在 JavaScript 上以函数式风格进行编程,您可能会发现传统的 fn(obj,params...)
形式很快就会变得不可读。
console.log(
join(
map(function(row){ return row.join(" "); },
format(
map(function(text){return align(text},
view),
20))),
"\n");
VS
view.map(function(text){return align(text)})
.format(20)
.map(function(row){return row.join(" ");})
.join("\n")
.log();
问题在于,后一种风格只能通过使用新功能扩展Object.prototype
来实现,这在全局范围内被认为是邪恶。然而,它的可读性是如此之高,以至于我不得不继续这样做。有没有更好的方法来解决这个问题?
最佳答案
是的,有更好的方法来解决这个问题。下面是使用 lodash 的演示.
错误的方法:
import _ from "lodash";
_.chain([1, 2, 3])
.map(x => [x, x*2])
.flatten()
.sort()
.value();
更好的方法:
import map from "lodash/fp/map";
import flatten from "lodash/fp/flatten";
import sortBy from "lodash/fp/sortBy";
import flow from "lodash/fp/flow";
flow(
map(x => [x, x*2]),
flatten,
sortBy(x => x)
)([1,2,3]);
参见Why using _.chain
is a mistake.以获得精彩而深入的解释。
关于javascript - 如何在 JavaScript 中使用链而不应用反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863759/