在(重新)执行本教程http://reactivex.io/learnrx/时,我发现repl.it和jsbin.com都拒绝这样的功能性JavaScript。
movieLists.
concatMap(function(category) {
return category.videos.map(function(video){
return video.boxarts
.reduce(function(acc,cur){
return (acc.width*acc.height)<(cur.width*cur.height) ? acc:cur
}).map(function(boxart){
return {id:video.id, title:video.title}
});
})
})
结果
"TypeError: video.boxarts.reduce(...).map is not a function
at dihuwo.js:105:24
at Array.map (native)
at dihuwo.js:100:36
at dihuwo.js:24:14
at Array.map (native)
at Array.concatMap (dihuwo.js:18:3)
at dihuwo.js:99:3
at dihuwo.js:113:3
at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:13616
at https://static.jsbin.com/js/prod/runner-3.35.5.min.js:1:10537"
为什么代码here on jsbin失败,而repl here接受它是合法的?
我错过了什么愚蠢的事情?我再说一遍......代码正在传递教程页面。到目前为止,对其他任何代表进行测试都是不可能的。
P.S。所有辅助函数(例如concatMap)都在此代码之上定义,因此不存在问题。
答案 0 :(得分:1)
它不起作用,因为在该教程中,它们会覆盖Array.prototype.reduce
。
它们的实现与标准实现的工作方式不同,它总是返回一个数组。
一般来说这样做是不好的做法,必须避免。