在单值上使用 Lodash 链

Use Lodash chain on single value

我想在单个 string 上链接一些方法,以便字符串操作看起来更具可读性。

但似乎 chain() 仅适用于集合。

这不是问题,我只是将它包装到数组中,但要获取最终值我必须使用零索引运算符,这在这里看起来很奇怪。

var res = _(["   test   "])
   .map(function(s) { return s + s; })
   .map(_.trim)
   .value()[0];

或打字稿:

var res = _(["   test   "])
   .map(s => s + s)
   .map(_.trim)
   .value()[0];

如何解决?

解决方案是使用 head() 而不是 value():

var res = _(["   test   "])
   .map(function(s) { return s + s; })
   .map(_.trim)
   .head();

或打字稿:

var res = _(["   test   "])
   .map(s => s + s)
   .map(_.trim)
   .head();

这样res只是一个字符串,代码可读性更好

lodash中有两个函数:

  1. thru - 将自定义函数应用于链中的值;
  2. tap - 应用自定义函数,但不传播其 return 值;

示例(纯 ES6):

const res = _.chain("   test   ")
       .thru(s => s + s)
       .thru(_.trim)
       .value();