Tôi đang cố gắng thực hiện một hàm removeAll()
, điều này sẽ loại bỏ tất cả các phần tử của một mảng với giá trị cụ thể đó (không phải chỉ mục).Làm thế nào để xóa nhiều mục của một mảng theo giá trị?
Phần khó khăn xảy ra khi chúng tôi thực hiện bất kỳ thay đổi nào đối với vòng lặp, các chỉ mục có xu hướng di chuyển xung quanh (làm cho nó rất khó để làm cho nó hoạt động như chúng tôi muốn) và khởi động lại vòng lặp mỗi khi chúng tôi thực hiện thay đổi là rất không hiệu quả mảng lớn.
Cho đến nay, tôi đã viết riêng arr.indexOf
chức năng của tôi (đối với hỗ trợ trình duyệt IE cũ), nó trông như thế này:
function arrFind(val, arr) {
for (var i = 0, len = arr.length, rtn = -1; i < len; i++) {
if (arr[i] === val) {
return i;
}
}
return -1;
}
Nó rất dễ dàng để loại bỏ các yếu tố như thế này:
var myarray = [0, 1, 2, 3, 4];
var tofind = 2;
var stored_index = arrFind(tofind, myarray);
if (stored_index != -1) {
myarray.splice(stored_index, 1);
}
alert(myarray.join(",")); //0,1,3,4
Tuy nhiên, như tôi đã chỉ ra trước đó, khi làm điều này trong khi lặp lại, chúng tôi gặp rắc rối.
Bất kỳ ý tưởng nào về cách xóa các mục mảng đúng cách trong khi lặp qua nó?
[thấy câu hỏi có liên quan này] (http://stackoverflow.com/q/3954438/908879) (nhưng là _not_ một dup vì câu hỏi của tôi là về _a problem_ khi tháo _multiple_ mục _inside một loop_) – ajax333221