为什么这两段代码的工作方式不同?
const a = new Rx.Subject;
const b = new Rx.Subject;
a.combineLatest( b ).map( merge => _.every( merge ) ).subscribe( r => console.log( "r:", r ) );
a.next( true );
b.next( true );
输出:r: true
const a = new Rx.Subject;
const b = new Rx.Subject;
a.combineLatest( b ).map( _.every ).subscribe( r => console.log( "r:", r ) );
a.next( true );
b.next( true );
输出:r: false
这两个在句法上不是等价的吗?
最佳答案
发布问题被临时删除之前写的答案。
Lodash every
接受 2 arguments (实际上有 3 of them )。
数组 map
回调有 3 parameters .
考虑到 map
预计仅使用第一个参数(值)调用 every
,every
调用时使用的参数不计算在内上,这改变了它的行为。
通常将现有函数作为回调提供,但要谨慎。仅当确定函数仅接受 1 个参数或其余参数不影响结果时才可接受,例如:
const stringArray = array.map(String);
如果对此有疑问,则应改用包装函数,例如:
// will produce unexpected results because parseInt has 2 params
// const numberArray = array.map(parseInt);
const numberArray = array.map(str => parseInt(str));
关于javascript - 将 lodash every() 函数作为参数传递给 Rx.JS map() 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862266/