I have an array
var array = ["google","chrome","os","windows","os"];
I want to delete the value "chrome" from the array without the array becoming a string. Is there a way to do this?
-
18I find it hard to believe that someone named Chromedude would want to delete Chrome from his array.ChessWhiz– ChessWhiz2010年09月22日 22:36:53 +00:00Commented Sep 22, 2010 at 22:36
-
@ChessWhiz haha, did not even think of that, but it is in my array and it does need to be deleted :)chromedude– chromedude2010年09月22日 22:47:23 +00:00Commented Sep 22, 2010 at 22:47
6 Answers 6
There's no faster way than finding it and then removing it. Finding it you can do with a loop or (in implementations that support it) indexOf. Removing it you can do with splice.
Live example: 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);
}
5 Comments
indexOf?indexOf to Array.prototype if it's not already there.This wraps it up into a convenient function:
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");
or (for browsers that support indexOf):
function remove_element(array, item) {
var index = array.indexOf(item);
if (-1 !== index) {
array.splice(index, 1);
}
}
Edit: Fixed up with === and !==.
2 Comments
=== and !== instead of == and !=, respectively.!== in (-1 !== index) ... index is known to be a number, because that's all indexOf will return, and -1 is known to be an number. So there's no need for strict comparison. I usually prefer something like (index > -1); YMMV.The splice() method adds and/or removes elements to/from an array, and returns the removed element(s).
array.splice(indexOfElement,noOfItemsToBeRemoved);
in your case
array.splice(1, 1);
Comments
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)
Comments
You didn't mention whether its required to retain the indices of the remaining elements in your array or not. On the basis that you can deal with having undefined members of an array, you can do:
var array = ["google","chrome","os","windows","os"];
delete array[1];
array[1] will then be undefined.