查看lodash
及其fp设施。我正在搜索等效的when
或ifElse
。
在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
完成此操作?
答案 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');