Lodash - 你能在变量声明后继续链接吗?
Lodash - can you continue chaining after variable declaration?
这段代码:
var foo = [1, 2, 3],
bar = _.chain(foo)
.map(number => number * 2);
console.log(bar.value());
bar.tap(numbers => {
numbers.push(10000);
});
console.log(bar.value());
10000
不会添加到 bar.value()
。但是,如果我在实际变量链中将水龙头移动到链中,它就可以正常工作。我确定这与调用 tap
的上下文有关,但有人能解释一下吗?似乎初始化一个链然后稍后修改它会很好。谢谢!
演示容器:http://jsbin.com/kidomeqalo/edit?html,js,console
JS Bin 在 jsbin.com
仅添加 bar.tap();
不会改变任何内容。您需要将其实际包含在链中:
bar = bar.tap(numbers => {
numbers.push(10000);
});
console.log(bar.value());
或
console.log(bar.tap(numbers => {
numbers.push(10000);
}).value());
最重要的是,您不应该使用 tap
来执行副作用。而是使用 bar.concat(10000).value()
或类似的东西,这清楚地表明它以功能方式创建新结果而不是改变任何东西 - 随着序列被延迟评估,这变得特别混乱。
这段代码:
var foo = [1, 2, 3],
bar = _.chain(foo)
.map(number => number * 2);
console.log(bar.value());
bar.tap(numbers => {
numbers.push(10000);
});
console.log(bar.value());
10000
不会添加到 bar.value()
。但是,如果我在实际变量链中将水龙头移动到链中,它就可以正常工作。我确定这与调用 tap
的上下文有关,但有人能解释一下吗?似乎初始化一个链然后稍后修改它会很好。谢谢!
演示容器:http://jsbin.com/kidomeqalo/edit?html,js,console
JS Bin 在 jsbin.com
仅添加 bar.tap();
不会改变任何内容。您需要将其实际包含在链中:
bar = bar.tap(numbers => {
numbers.push(10000);
});
console.log(bar.value());
或
console.log(bar.tap(numbers => {
numbers.push(10000);
}).value());
最重要的是,您不应该使用 tap
来执行副作用。而是使用 bar.concat(10000).value()
或类似的东西,这清楚地表明它以功能方式创建新结果而不是改变任何东西 - 随着序列被延迟评估,这变得特别混乱。