2014-09-29 107 views
0

我需要帮助了解我的代码中发生了什么。我计划编写一个函数,它接受一个字符串并删除所有字母。输入将是字母和数字的组合。我想这个函数返回字符串中所有数字的数组。我已经成功地写东西(用计算器的帮助下):从javascript中删除空字符串

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

它从数组中删除元素。在你的情况下,空字符串是数组中的一个元素。 – zsong 2014-09-29 01:17:08

回答

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"] 
 
};

0

不像返回一个新的数组等方法,而使原创.splice method突变数组,对其进行就地更改。

声明arr.splice(i, 1);表示从位置i开始从阵列中删除一个项目arrif(arr[i] == "")表示如果i位置的项目为空字符串,则执行此块内的内容。所以当if声明为真时,该项目将从数组中移除。

这就是说,除非你需要支持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); 

这可以在一个步骤中完成,而不必过滤掉空字符串。