javascript - 将 lodash every() 函数作为参数传递给 Rx.JS map() 运算符

标签 javascript ecmascript-6 rxjs lodash

为什么这两段代码的工作方式不同?

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 预计仅使用第一个参数(值)调用 everyevery 调用时使用的参数不计算在内上,这改变了它的行为。

通常将现有函数作为回调提供,但要谨慎。仅当确定函数仅接受 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/

相关文章:

javascript - Angular 2.0 - 将 promise 链转换为 Observables

javascript - 如何使用JavaScript通过特定标签正则表达式从HTML文档中获取元素?

javascript - 如何在 ES6 类中定义类级别常量

javascript - 拒绝来自 then() 的 promise

angular - rxjs 运算符,如何在单个对象中返回嵌套数据?

javascript - 在 node.js 中需要 RX.js

javascript - 为什么括号不会改变 JavaScript 中 == 和 === 的运算符优先级?

javascript - 按钮 onclick 显示 id 和值未定义

javascript - 从指令链接函数观察 Controller 范围

javascript - 动态 ES2015 import() 外部模块(来自 Chrome 75 DevTools 的示例)