2010-09-22 70 views
5

我有一個數組有沒有一種快速的方法從Javascript中的數組中刪除特定的值?

var array = ["google","chrome","os","windows","os"]; 

我想刪除從數組中值"chrome"沒有陣列成爲一個字符串。有沒有辦法做到這一點?

+17

我覺得很難相信名爲Chromedude的人會想要從他的數組中刪除_Chrome。 – ChessWhiz 2010-09-22 22:36:53

+0

@ChessWhiz哈哈,甚至沒有想到這一點,但它是在我的陣列中,它確實需要刪除:) – chromedude 2010-09-22 22:47:23

回答

5

沒有比找到它然後刪除它更快的方法。找到它你可以使用循環或(在支持它的實現中)indexOf。刪除它你可以用splice

活生生的例子:http://jsbin.com/anuta3/2

var array, index; 
array = ["google","chrome","os","windows","os"]; 
if (array.indexOf) { 
    index = array.indexOf("chrome"); 
} 
else { 
    for (index = array.length - 1; index >= 0; --index) { 
    if (array[index] === "chrome") { 
     break; 
    } 
    } 
} 
if (index >= 0) { 
    array.splice(index, 1); 
} 
+0

會在IE中工作嗎?我似乎記得在某處看到它不支持'indexOf'? – 2010-09-22 22:43:03

+0

就像TJ提到的,並非所有瀏覽器都實現了indexOf。你可能需要實現你自己的。 – DashK 2010-09-22 22:44:14

+0

@David:並不是所有的實現都有它,因此「帶有循環」是答案的一部分。 :-)通常我只是將'indexOf'添加到'Array.prototype'中,如果它尚未存在的話。 – 2010-09-22 22:45:10

3

這把它包裝成一個方便的功能:

function remove_element(array, item) { 
    for (var i = 0; i < array.length; ++i) { 
    if (array[i] === item) { 
     array.splice(i, 1); 
     return; 
    } 
    } 
} 

var array = ["google", "chrome", "os", "windows", "os"]; 
remove_element(array, "chrome"); 

或(對於支持indexOf瀏覽器):

function remove_element(array, item) { 
    var index = array.indexOf(item); 
    if (-1 !== index) { 
    array.splice(index, 1); 
    } 
} 

編輯:固定與===!==

+1

你應該分別使用'==='和'!=='來代替'=='和'!='。 – 2010-09-22 23:03:39

+0

@熊會吃掉你:在'(-1!== index)'中不需要'!=='...索引被認爲是一個數字,因爲這就是所有的indexOf都會返回,並且-1已知是一個數字。所以沒有必要進行嚴格的比較。我通常比較喜歡'(index> -1)';因人而異。 – 2010-09-22 23:18:30

2

splice()方法向/從數組添加和/或移除元素,並返回移除的元素。

array.splice(indexOfElement,noOfItemsToBeRemoved); 

你的情況

array.splice(1, 1); 
1

你沒有提及是否需要它保留其餘元素的索引在你的陣列或沒有。上,可以處理具有陣列的未定義成員的基礎上,可以這樣做:

var array = ["google","chrome","os","windows","os"]; 
delete array[1]; 

陣列[1]於是將未定義的。

+0

謝謝,但我不想要一個未定義的值。 – chromedude 2010-09-23 00:33:19

2
You may want to remove all of the items that match your string, 
or maybe remove items that pass or fail some test expression. 
Array.prototype.filter, or a substitute, is quick and versatile: 


var array= ["google","chrome","os","windows","os"], 
b= array.filter(function(itm){ 
    return 'os'!= itm 
}); 
alert(b) 
相關問題