i_m*_*hat 10 javascript arrays
我找到了使用该Array.prototype.filter方法从字符串中删除所有非数字的这种很酷的方法,但我不完全确定它是如何使用Number原型来实现的:
var arr = '75number9';
arr.split(/[^\d]/).filter(Number); // returns [75, 9]
Run Code Online (Sandbox Code Playgroud)
当我检查typeof Number我回来'function'.这里发生了什么?
这进一步增加了我的困惑是,如果我替换Number用String,结果都是一样的.它仍然有效!
arr.split(/[^\d]/).filter(String); // returns [75, 9]
Run Code Online (Sandbox Code Playgroud)
Array而Object作为参数,而另一方面,返回此:
["75", "", "", "", "", "", "9"]
Run Code Online (Sandbox Code Playgroud)
非常好奇明白这一点!
Number是一个(构造函数)函数,试图返回一个数字.给它一个文字数字或一个可以解析为数字的字符串,然后返回该数字.给它别的东西,它就会回来NaN.
Filter返回回调函数(在本例中Number)返回truthy值的值.数中!= 0和!= NaN是truthy,并因此返回.
因此,您的示例不返回0值:
var arr = '75number0';
arr.split(/[^\d]/).filter(Number);
// ["75"]
Run Code Online (Sandbox Code Playgroud)
请注意,返回的数组的值仍然是字符串.如果我们想要它们是数字,我们可以使用map():
arr.split(/[^\d]/).filter(Number).map(Number);
// [75, 9]
Run Code Online (Sandbox Code Playgroud)
在使用String构造函数而不是的情况下Number,它的工作原理是因为它String为空字符串返回空字符串,而空字符串('')就像是一样0.