lodash 中文学习拾零之 Chain篇

本文详细介绍了lodash中用于链式操作的Chain特性,包括显式和隐式调用方式,以及_.tap、_.thru等方法的作用。Chain允许进行复杂的多步操作,并通过_.value()延迟计算。此外,还提及了lodash wrapper对Array和String方法的支持。
摘要由CSDN通过智能技术生成

作者:Soaring_Tiger 转载请注明出处

前情提要: lodash中文学习拾零之Array篇

2、Chain

可以说是 lodash 中最为重要的部件,想要用lodash进行复杂的多步操作都离不开chain的帮助。

首先说说Chain的调用方式有两种:一种是显式调用(Explicit Chaining),一种是隐式调用(Implicit Chaining)。

//下面的例子采用了ECMAScript2015的语法:
//显式调用例子如下:
let numbers = [1, 2, 3, 4, 5];
let sumOfEvenSquares = _.chain(numbers) //注意numbers放置的位置
    .filter(n => n % 2 === 0)
    .map(n => n * n)
    .sum()
    .value();    
//sumOfEvenSquares: 20
//特别要注意结尾的那个.value()
//隐式调用例子如下:
let sumOfEvenSquares = _(numbers) //注意numbers的位置,不需要显式的使用chain关键字
    .filter(n => n % 2 === 0)
    .map(n => n * n)
    .sum()
let isEven = n => n % 2 === 0;
let square = n => n * n;
let sumOfEvenSquares = _(numbers).filter(isEven).map(square).sum();

从上面例子可以看出,隐式调用比显式调用更加简洁方便。

为什么要多出来一个 .value(),而不是直接出结果呢?那是因为可能要等待延时(Deferred execution)数据的到来,再执行取值。这就是我们常说的Lazy evaluation (延迟计算/惰性求值)

//如下面的例子:首先生成链式表达式
var wallet = _(assets).filter(ownedBy('me'))
                      .pluck('value')
                      .reduce(sum);

$json.get("/new/assets").success(function
以下是Java代码实现: ```java public class NumberToChinese { // 数字转中文大写 private static final String[] CHINESE_NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static final String[] CHINESE_UNITS = {"", "拾", "佰", "仟"}; private static final String[] CHINESE_GROUP_UNITS = {"", "万", "亿"}; public static String numberToChinese(double num) { if (num == 0) { return "零元整"; } long integerPart = (long) num; int decimalPart = (int) Math.round((num - integerPart) * 100); StringBuilder sb = new StringBuilder(); int groupIndex = 0; while (integerPart > 0) { int groupNum = (int) (integerPart % 10000); sb.insert(0, CHINESE_GROUP_UNITS[groupIndex++]); if (groupIndex > 1 && groupNum < 1000) { sb.insert(0, "零"); } sb.insert(0, groupToChinese(groupNum)); integerPart /= 10000; } sb.append("元"); if (decimalPart > 0) { sb.append(decimalToChinese(decimalPart)); } else { sb.append("整"); } return sb.toString(); } private static String groupToChinese(int num) { StringBuilder sb = new StringBuilder(); int unitIndex = 0; boolean addZero = false; while (num > 0) { int digit = num % 10; if (digit == 0) { addZero = true; } else { if (addZero) { sb.insert(0, CHINESE_NUMBERS[0]); } sb.insert(0, CHINESE_NUMBERS[digit] + CHINESE_UNITS[unitIndex]); addZero = false; } unitIndex++; num /= 10; } return sb.toString(); } private static String decimalToChinese(int num) { StringBuilder sb = new StringBuilder(); int digit = num / 10; if (digit > 0) { sb.append(CHINESE_NUMBERS[digit] + "角"); } digit = num % 10; if (digit > 0) { sb.append(CHINESE_NUMBERS[digit] + "分"); } return sb.toString(); } public static void main(String[] args) { double num = 12345678; String chinese = numberToChinese(num); System.out.println(chinese); } } ``` 输出结果为:`壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元整`
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值