停止在 lodash 链中隐式提交
Stop implicit commiting in lodash chain
直到今天我还认为 lodash 链 "collapses" 通过显式调用 .value()
。但是,下面的片段证明我错了
(function(undefined) {
var a = { a: 'a', b: 'b' };
var chain = _(a);
chain.pick('b');
// > { a: 'a', b: 'b' }
console.log(chain.value());
chain = _(a).pick('b');
// > { b: 'b' }
console.log(chain.value());
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
有没有办法关闭隐式链提交?
不,你不能。这就是连锁店的运作方式。
但是你可以plant
(克隆)一条链。
var array = [1, 2];
var wrapped = _(array).map(function(value) {
return Math.pow(value, 2);
});
var other = [3, 4];
var otherWrapped = wrapped.plant(other);
otherWrapped.value(); // → [9, 16]
wrapped.value(); // → [1, 4]
如果@HNeiva 的回答不适合你的原因,你可以简单地用最新的包装器覆盖你的旧链:
(function(undefined) {
var a = { a: 'a', b: 'b' };
var chain = _(a);
chain = chain.pick('b');
// > { b: 'b' }
console.log(chain.value());
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
直到今天我还认为 lodash 链 "collapses" 通过显式调用 .value()
。但是,下面的片段证明我错了
(function(undefined) {
var a = { a: 'a', b: 'b' };
var chain = _(a);
chain.pick('b');
// > { a: 'a', b: 'b' }
console.log(chain.value());
chain = _(a).pick('b');
// > { b: 'b' }
console.log(chain.value());
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
有没有办法关闭隐式链提交?
不,你不能。这就是连锁店的运作方式。
但是你可以plant
(克隆)一条链。
var array = [1, 2];
var wrapped = _(array).map(function(value) {
return Math.pow(value, 2);
});
var other = [3, 4];
var otherWrapped = wrapped.plant(other);
otherWrapped.value(); // → [9, 16]
wrapped.value(); // → [1, 4]
如果@HNeiva 的回答不适合你的原因,你可以简单地用最新的包装器覆盖你的旧链:
(function(undefined) {
var a = { a: 'a', b: 'b' };
var chain = _(a);
chain = chain.pick('b');
// > { b: 'b' }
console.log(chain.value());
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>