什么是拉达的'当'时,lodash / fp相当于什么呢?功能?

时间:2017-12-04 07:52:53

标签: lodash ramda.js

查看lodash及其fp设施。我正在搜索等效的whenifElse

Ramda中,可以使用when来制作半速传单。检查已发送数据的谓词,如果为真,则执行某些操作。如果为false,则返回输入数据不变。

// truncate :: String -> String
var truncate = R.when(
  R.propSatisfies(R.gt(R.__, 10), 'length'),
  R.pipe(R.take(10), R.append('…'), R.join(''))
);
truncate('12345');         //=> '12345'
truncate('0123456789ABC'); //=> '0123456789…'

如何在lodash完成此操作?

2 个答案:

答案 0 :(得分:3)

我不知道如何在lodash / fp中执行此操作。 (其中一天,我发誓我花了一些时间来了解更多信息!)但请注意,编写的版本可以简化。

首先,保留在Ramda(免责声明:我是作者之一),但使用简单的ES6风格的lambdas简化你的功能:

// truncate :: String -> String
var truncate = R.when(
  s => s.length > 10,
  s => s.slice(0, 10) + '…'
);
truncate('12345');         //=> '12345'
truncate('0123456789ABC'); //=> '0123456789…'

我觉得这个版本非常易读,可能会留下它。但您也可以通过将when替换为另一个ES6-lambda并使用条件表达式来完全删除库:

// truncate :: String -> String
var truncate = s => s.length > 10 ? s.slice(0, 10) + '…' : s;

无点技术是一种很好的技术,通常可以增加可读性。但是当它模糊了意义时,没有什么理由可以使用它。

答案 1 :(得分:0)

在lodash fp中,您应该为此“ cond”:

const showTen = fp.pipe(
    fp.slice(0, 10),
    fp.join(''),
    fp.add(fp.__, '...')
);

const gtThanTen = fp.pipe(
    fp.result('length'),
    fp.lt(10)
);

const showOnlyTen = fp.cond([
    [gtThanTen, showTen],
    [fp.stubTrue, fp.identity]
]);

showOnlyTen('12345678901');