2013-12-20 19 views
1

刪除號碼我有一個數組:從字符串數組

var array = ["0CS", "0CR", "1CR", "1AR"] 

我想從每個字符串中刪除號碼,就變成:

["CS","CR","CR","AR"] 

有沒有更有效的方法比這(純粹在JS)?

var noNumberArray = [] 
for(var item in array){ 
    noNumberArray.push(array[item].replace(/\d+/,"")); 
} 
array = noNumberArray; 
+1

使用'for'而不是'for-in'會更有效率,並且可以說更加正確。此外,你並沒有改變陣列。你正在創建一個新的數組。這在某些情況下可能會有所不同。 –

回答

1

使用簡單的for循環,而無需使用額外的陣列性能測試的(令人驚奇的)贏家。

http://jsperf.com/nate-array-manipulation

for (var i = 0, ln = myArray.length; i < ln; i++) { 
    myArray[i] = myArray[i].replace(/\d+/,""); 
} 

此外,更改屬性,而不是直接創建一個新的陣列似乎是更好的性能,在所有情況下,但一個(勉強),根據我的測試。

forEach是次佳,for... in之後進來,map是最不重要的所有。

1
for(var i=0 ; i<array.length ; ++i) array[i] = array[i].replace(/\d+/,'') 

array // ["CS", "CR", "CR", "AR"] 
+0

你打敗了我! – lupos

+2

使用大括號和分號不會讓代碼更有效率。可讀性比擬合一行更好。 – Nate

+2

@Nate那裏沒有分歧 - 主要觀點是'array'可以在原地進行編輯,而不是使用單獨的'noNumberArray'數組。 – Matt

0

試試這個代碼,這可能幫助ü

noNumberArray.push(array[item].replace(/[0-9]/g, '')); 
0
for (var i = 0, ln = array.length; i < ln; i++{ 
    noNumberArray.push(array[i].replace(/\d+/,"")); 
} 

...可能是一點點更快的數組。

REF:JavaScript for...in vs for

0
var array = ["1AB", "AB2", "A3B"]; 
array = array.map(function(val) { return val.replace(/\d*/g, "");});