2010-09-22 43 views
5

Tôi có một mảngCó cách nào nhanh chóng để xóa một giá trị cụ thể khỏi một mảng trong Javascript không?

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

Tôi muốn xóa giá trị "chrome" từ mảng mà không có mảng trở thành một chuỗi. Có cách nào để làm việc này không?

+17

Tôi thấy khó tin rằng ai đó có tên là Chromedude muốn xóa _delete_ Chrome khỏi mảng của mình. – ChessWhiz

+0

@ChessWhiz haha, thậm chí không nghĩ về điều đó, nhưng nó nằm trong mảng của tôi và nó cần phải bị xóa :) – chromedude

Trả lời

5

Không có cách nào nhanh hơn tìm và sau đó xóa. Tìm kiếm nó, bạn có thể làm với một vòng lặp hoặc (trong triển khai có hỗ trợ nó) indexOf. Loại bỏ nó, bạn có thể làm với splice.

Sống dụ: 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

Điều đó có hiệu quả trong IE không? Tôi dường như nhớ lại thấy một nơi nào đó mà nó không/không hỗ trợ 'indexOf'? –

+0

Giống như TJ đã đề cập, không phải tất cả các trình duyệt đều có triển khai indexOf. Bạn có thể cần phải thực hiện của riêng bạn. – DashK

+0

@David: Không phải tất cả các triển khai đều có nó, do đó phần "có vòng lặp" của câu trả lời. :-) Thông thường tôi chỉ cần thêm 'indexOf' vào' Array.prototype' nếu nó chưa có ở đó. –

2

Sử dụng phương thức splice của lớp Array.

array.splice(1, 1); 
3

này kết thúc tốt đẹp nó lên thành một chức năng thuận tiện:

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"); 

hoặc (đối với trình duyệt hỗ trợ indexOf):

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

Edit: Cố định lên với ===!==.

+1

Bạn thực sự nên sử dụng '===' và '! ==' thay vì '==' và '! =', Tương ứng. –

+0

@Bears sẽ ăn bạn: Không cần '! ==' trong '(-1! == index)' ... index được biết là một số, bởi vì đó là tất cả indexOf sẽ trả về và -1 được biết là là một số. Vì vậy, không cần phải so sánh nghiêm ngặt. Tôi thường thích cái gì đó như '(index> -1)'; YMMV. –

2

Phương thức splice() bổ sung và/hoặc loại bỏ các phần tử vào/ra khỏi mảng và trả về (các) thành phần đã xóa.

array.splice(indexOfElement,noOfItemsToBeRemoved); 

trong trường hợp của bạn

array.splice(1, 1); 
1

Bạn đã không đề cập đến việc cần thiết để duy trì các chỉ số của các yếu tố còn lại trong mảng của bạn hay không. Trên cơ sở bạn có thể xử lý các thành viên không xác định của một mảng, bạn có thể làm:

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

mảng [1] sẽ không được xác định.

+0

cảm ơn, nhưng tôi không muốn một giá trị không xác định. – chromedude

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) 
Các vấn đề liên quan