我需要帮助了解我的代码中发生了什么。我打算写一个函数,它接受一个字符串并删除所有字母。输入将是字母和数字的组合。我希望此函数返回字符串中找到的所有数字的数组。我已成功编写了一些东西(在stackoverflow的帮助下):
number = "32321FDFDS 44"
arr = number.replace(/[A-Za-z]/g," ").split(" ")
for(var i = arr.length - 1; i >= 0; i--){
if(arr[i] == "") {
arr.splice(i, 1);
}
}
返回
[ '32321', '44' ]
现在这是完美的。我的问题是我不明白arr.splice(i,1)是如何删除空字符串的。删除arr
中的空字符串没有意义。有人能帮助我理解这个吗?
答案 0 :(得分:1)
测试:
if (arr[n] == "") // if item `n` within `arr` array `==` `""` , do stuff
数组中有两个项目:
var arr = ["123", ""];
if (arr[0] == "") {
arr.splice(0,1);
} else {
console.log(arr); // ["123", ""];
};
if (arr[1] == "") {
arr.splice(1,1);
console.log(arr); // ["123"]
};
答案 1 :(得分:0)
与返回新数组的其他方法不同,只保留原始变量,.splice
method会改变数组,对其进行就地更改。
声明arr.splice(i, 1);
表示从位置i
开始从数组arr
中删除一个项目。 if(arr[i] == "")
表示位置i
的项目是否为空字符串,请执行此块内的内容。因此,当if
语句为true时,该项将从数组中删除。
除非你需要支持ES3浏览器(有效地意味着IE8或更低版本),否则我只想使用.filter
method:
var number = "32321FDFDS 44",
arr = number.replace(/[A-Za-z]/g," ").split(" ").filter(function (item) {
return !!item; // all strings except an empty string will coerce to true
});
console.log(arr);
如果您只是尝试从没有其他要求的字符串中提取数字字符串数组,那么更简洁的方法就是将一个或多个非数字拆分:
var number = "32321FDFDS 44",
arr = number.split(/\D+/);
// arr is now [ "32321", "44" ]
console.log(arr);
这一切都可以一步完成而无需过滤掉空字符串。