我有一個數組有沒有一種快速的方法從Javascript中的數組中刪除特定的值?
var array = ["google","chrome","os","windows","os"];
我想刪除從數組中值"chrome"
沒有陣列成爲一個字符串。有沒有辦法做到這一點?
我有一個數組有沒有一種快速的方法從Javascript中的數組中刪除特定的值?
var array = ["google","chrome","os","windows","os"];
我想刪除從數組中值"chrome"
沒有陣列成爲一個字符串。有沒有辦法做到這一點?
沒有比找到它然後刪除它更快的方法。找到它你可以使用循環或(在支持它的實現中)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);
}
會在IE中工作嗎?我似乎記得在某處看到它不支持'indexOf'? – 2010-09-22 22:43:03
就像TJ提到的,並非所有瀏覽器都實現了indexOf。你可能需要實現你自己的。 – DashK 2010-09-22 22:44:14
@David:並不是所有的實現都有它,因此「帶有循環」是答案的一部分。 :-)通常我只是將'indexOf'添加到'Array.prototype'中,如果它尚未存在的話。 – 2010-09-22 22:45:10
使用Array類的splice方法。
array.splice(1, 1);
這把它包裝成一個方便的功能:
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);
}
}
編輯:固定與===
和!==
。
你應該分別使用'==='和'!=='來代替'=='和'!='。 – 2010-09-22 23:03:39
@熊會吃掉你:在'(-1!== index)'中不需要'!=='...索引被認爲是一個數字,因爲這就是所有的indexOf都會返回,並且-1已知是一個數字。所以沒有必要進行嚴格的比較。我通常比較喜歡'(index> -1)';因人而異。 – 2010-09-22 23:18:30
splice()方法向/從數組添加和/或移除元素,並返回移除的元素。
array.splice(indexOfElement,noOfItemsToBeRemoved);
你的情況
array.splice(1, 1);
你沒有提及是否需要它保留其餘元素的索引在你的陣列或沒有。上,可以處理具有陣列的未定義成員的基礎上,可以這樣做:
var array = ["google","chrome","os","windows","os"];
delete array[1];
陣列[1]於是將未定義的。
謝謝,但我不想要一個未定義的值。 – chromedude 2010-09-23 00:33:19
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)
我覺得很難相信名爲Chromedude的人會想要從他的數組中刪除_Chrome。 – ChessWhiz 2010-09-22 22:36:53
@ChessWhiz哈哈,甚至沒有想到這一點,但它是在我的陣列中,它確實需要刪除:) – chromedude 2010-09-22 22:47:23