在javascript中从数组中删除空字符串

时间:2014-09-29 01:11:29

标签: javascript arrays string

我需要帮助了解我的代码中发生了什么。我打算写一个函数,它接受一个字符串并删除所有字母。输入将是字母和数字的组合。我希望此函数返回字符串中找到的所有数字的数组。我已成功编写了一些东西(在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中的空字符串没有意义。有人能帮助我理解这个吗?

2 个答案:

答案 0 :(得分:1)

测试:

if (arr[n] == "") // if item `n` within `arr` array `==` `""` , do stuff

请参阅Array.prototype.splice()

数组中有两个项目:

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);

jsFiddle

如果您只是尝试从没有其他要求的字符串中提取数字字符串数组,那么更简洁的方法就是将一个或多个非数字拆分:

var number = "32321FDFDS 44",
  arr = number.split(/\D+/);

// arr is now [ "32321", "44" ]
console.log(arr);

这一切都可以一步完成而无需过滤掉空字符串。