Sahibim:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Şöyle bir şey yapabilmek istiyorum:
array.remove("B");
ancak kaldırma işlevi yoktur. Bunu nasıl başarırım?
Sahibim:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Şöyle bir şey yapabilmek istiyorum:
array.remove("B");
ancak kaldırma işlevi yoktur. Bunu nasıl başarırım?
Yanıtlar:
Aslında bu konuyu daha yeni bir 1 satırlık çözümle güncelliyorum:
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
Temelde fikir, kaldırmak istediğiniz öğeden farklı tüm öğeleri seçerek diziyi filtrelemektir.
Not: tüm oluşumları kaldıracaktır.
DÜZENLE:
Yalnızca ilk geçtiği yeri kaldırmak istiyorsanız:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Listede ters sırayla döngü yapın ve .spliceyöntemi kullanın .
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
}
}
Ters sıra, arama teriminin tüm oluşumlarının kaldırılması gerektiğinde önemlidir. Aksi takdirde, sayaç artacak ve öğeleri atlayacaksınız.
Yalnızca ilk oluşumun kaldırılması gerektiğinde, aşağıdakiler de işe yarayacaktır:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0, örneğin C'deki gibi otomatik olarak daha hızlı değildir. Sınırı önbelleğe aldığınız sürece, tabii ki, ilk maçtan sonra devam ederseniz işleri karmaşıklaştırır (ama üzerinde durursanız değil).
Bir Gömlek Listesi
Bu problemi bu dizi için çözelim:
var array = ['A', 'B', 'C'];
1. Yalnızca ilkini kaldırın: Kullanın Öğenin mevcut olduğundan eminseniz
array.splice(array.indexOf('B'), 1);
2. Yalnızca sonuncuyu kaldırın: Kullan Öğenin mevcut olduğundan eminseniz
array.splice(array.lastIndexOf('B'), 1);
3. Tüm oluşumları kaldırın:
array = array.filter(v => v !== 'B');
Aradığınız şeyin yerini bulmanız ve .indexOf()ardından onu kaldırmanız gerekir..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);
Bu, tüm olayları halledecektir.
Uncaught ReferenceError: array is not defined. Yanlış olan ne?
.indexOf()biraz daha fazlasından kolayca yararlanabilirsiniz . Eğer başarılı olursa found, ikinci argüman olarak .indexOf()çağrı sırasında-döngü içinde , dizideki elemanları zaten kontrol edildi ve bitti eşit tekrar kontrol edilmez ediliyor olmadığını: found = arr.indexOf(what, found);
basitçe
array.splice(array.indexOf(item), 1);
-1hiçbir şey bulunmazsa dönecek ve haykıracak, splice dizinin sonundan 1 öğeyi silecek
Basit çözüm (ES6)
Yinelenen öğeniz yoksa
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
Kendi çıkartmanızı yazmalısınız. Dizi üzerinde döngü oluşturabilir, kaldırmak istediğiniz öğenin dizinini alabilir ve spliceonu kaldırmak için kullanabilirsiniz .
Alternatif olarak, yeni bir dizi oluşturabilir, mevcut dizi üzerinde döngü oluşturabilir ve mevcut nesne kaldırmak istediğiniz şeyle eşleşmezse, onu yeni bir diziye koyabilirsiniz.
kullanın:
array.splice(2, 1);
Bu, dizin 2'den (3. öğe) başlayarak diziden bir öğeyi kaldırır
array.splice(2,1), dizin 2'deki 1 öğeyi diziden kaldıran gibi olabilir . Daha fazla ayrıntı için https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice adresini kontrol edin
array.splice kullanın
/*array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension*/
array.splice(1,1)
Kaynak: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
arrayve splicenokta olmalıdır.
.indexOf()ve.splice()hile yapmalı. Veya belki alternatif olarak.filter().