Tôi có:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Tôi muốn có thể làm một cái gì đó như:
array.remove("B");
nhưng không có chức năng loại bỏ. Làm thế nào để tôi thực hiện điều này?
Tôi có:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Tôi muốn có thể làm một cái gì đó như:
array.remove("B");
nhưng không có chức năng loại bỏ. Làm thế nào để tôi thực hiện điều này?
Câu trả lời:
Tôi thực sự đang cập nhật chủ đề này với một giải pháp 1 dòng gần đây hơn:
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
Ý tưởng về cơ bản là để lọc mảng bằng cách chọn tất cả các phần tử khác với phần tử bạn muốn loại bỏ.
Lưu ý: sẽ loại bỏ tất cả các lần xuất hiện.
BIÊN TẬP:
Nếu bạn muốn loại bỏ chỉ xảy ra đầu tiên:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Lặp lại danh sách theo thứ tự ngược lại và sử dụng .splice
phương thức.
var array = ['A', 'B', 'C']; // Test
var search_term = 'B';
for (var i=array.length-1; i>=0; i--) {
if (array[i] === search_term) {
array.splice(i, 1);
// break; //<-- Uncomment if only the first term has to be removed
}
}
Thứ tự đảo ngược là quan trọng khi tất cả lần xuất hiện của cụm từ tìm kiếm phải được loại bỏ. Nếu không, bộ đếm sẽ tăng lên, và bạn sẽ bỏ qua các yếu tố.
Khi chỉ có sự xuất hiện đầu tiên phải được loại bỏ, điều sau đây cũng sẽ hoạt động:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0
không tự động nhanh hơn như trong C. Miễn là bạn lưu trữ giới hạn, tất nhiên, điều đó sẽ làm phức tạp mọi thứ nếu bạn tiếp tục sau trận đấu đầu tiên (nhưng không phải nếu bạn dừng lại ở đó).
Danh sách một Liners
Hãy giải quyết vấn đề này cho mảng này:
var array = ['A', 'B', 'C'];
1. Chỉ xóa phần đầu tiên: Sử dụng Nếu bạn chắc chắn rằng mục đó tồn tại
array.splice(array.indexOf('B'), 1);
2. Chỉ xóa phần cuối cùng: Sử dụng Nếu bạn chắc chắn rằng mục đó tồn tại
array.splice(array.lastIndexOf('B'), 1);
3. Loại bỏ tất cả các lần xuất hiện:
array = array.filter(v => v !== 'B');
Bạn cần tìm vị trí của những gì bạn đang tìm kiếm .indexOf()
sau đó xóa nó bằng.splice()
function remove(arr, what) {
var found = arr.indexOf(what);
while (found !== -1) {
arr.splice(found, 1);
found = arr.indexOf(what);
}
}
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
remove(array, 'B');
alert(array);
Điều này sẽ chăm sóc tất cả các lần xuất hiện.
Uncaught ReferenceError: array is not defined
. Chuyện gì thế?
.indexOf()
chỉ một chút nữa. Nếu bạn chuyển found
làm đối số thứ hai cho .indexOf()
cuộc gọi trong vòng lặp while , các phần tử trong mảng đã được kiểm tra và kết thúc không bằng nhau sẽ không được kiểm tra lại: found = arr.indexOf(what, found);
Đơn giản
array.splice(array.indexOf(item), 1);
-1
nếu không tìm thấy gì và rất tiếc, splice sẽ xóa 1 phần tử khỏi cuối mảng
Giải pháp đơn giản (ES6)
Nếu bạn không có yếu tố trùng lặp
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
sử dụng:
array.splice(2, 1);
Thao tác này sẽ xóa một mục khỏi mảng, bắt đầu từ chỉ mục 2 (mục thứ 3)
array.splice(2,1)
loại bỏ 1 mục tại chỉ mục 2 khỏi mảng. kiểm tra https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice để biết thêm chi tiết
sử dụng mảng.splice
/*array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension*/
array.splice(1,1)
Nguồn: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
array
và splice
phải là một dấu chấm.
.indexOf()
và.splice()
nên làm các thủ thuật. Hoặc có thể, thay thế ,.filter()
.