在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