停止在 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(克隆)一条链。

From the docs:

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>