Prototype.js 1.7:将collect与显式函数一起使用会返回与内联函数不同的结果,原因是什么



在Javascript中考虑这个散列:

> a = { 80450: "915", 111931: "930", 111938: "", 1234: null, 5678: undefined } 

这个函数应该只返回解析为整数值>0:的值

> $H(a).values().filter(function(x) { return x; }).collect(function(x){return parseInt(x)});
[915, 930]

这似乎是正确的。但是这个

> $H(a).values().filter(function(x) { return x; }).collect(parseInt);
[915, NaN]

是否应该做同样的事情(不是吗)?事实并非如此。在Chrome 31和Firefox 25上测试。这可能是Prototype中的一个错误吗?

附带问题:有没有更简单的方法?

collect()方法需要迭代器函数类型,而通常当您传递带有一个参数的闭包时,只使用第一个参数

collect(function(x){
   //function body
});

但是collect实际上是将2个参数传递给迭代器函数

collect(function(value,index){
    //function body
});

当你把parseInt()作为迭代器,用parseInt(string,radix)的函数定义时,你会得到

parseInt("915",0);  // => 915
parseInt("930",1);  // => NaN as radix 1 doesn't make sense

最新更新