2014-09-29 208 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); 

這可以在一個步驟中完成,而不必過濾掉空字符串。