从它将返回哪些数据的角度调用map方法的方法有什么不同?
我希望当我做的时候
_(object).map(callback);
它导致创建新的下划线类实例,返回值是下划线的包装器
而不是使用
_.map(obj, callback)
使用相同的(已创建的)下划线实例并按预期返回纯JavaScript数组
答案 0 :(得分:0)
这取决于。如果您没有计划在map()
之前或之后链接任何函数调用,那么包装该值是没有意义的。另一方面,构造applicatively转换集合的链会导致紧凑且可读的代码。
根据应用程序的结构,包装器实例可以从一个函数传递到另一个函数,并构建在其上。这是有效的,因为它们是懒惰的,因为链接的调用实际上并不会被调用{。}}。
从评估的角度来看,他们也很懒惰。这是lodash lazy evaluation上的一个很好的资源。
答案 1 :(得分:0)
在所有情况下,链式语法的结果与非链式系统相同。
大多数情况下,链接语法只是一种更易读的语法,可以同时执行多个操作。
大多数人都会发现这种链式语法:
_(ds)
.groupBy("group")
.map(function(group) {
return _.sample(group, n);
})
.flatten()
.value();
比非链式语法更具可读性:
_.flatten(_.map(_.groupBy(ds), "group", function(group) {
return _.sample(group, n);
}))
但同样,两者都会给你相同的结果。
但是,在lodash中,(从版本3.0开始) 使用链接语法的潜在性能优势,因为它使用延迟评估。这意味着它将推迟尽可能多的评估,以便最小化计算结果所需的操作,并减少创建的临时数组的数量。
关于lazy evaluation链接的文章Adam Boduch似乎是一个很好的资源,或者你可以阅读overview for Lazy.js,它本质上是lodash / underscore的懒惰评估版本,之后lodash支持懒惰评估本身。虽然那个已经过时了,但是它并没有反映出自编写本文以来懒惰的评价已被添加到lodash中。
Underscore最终可能会最终为他们的链接语法添加惰性评估,但我还没有看到任何迹象表明他们的路线图。