Mam:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Chcę móc zrobić coś takiego:
array.remove("B");
ale nie ma funkcji usuwania. Jak to osiągnąć?
Mam:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Chcę móc zrobić coś takiego:
array.remove("B");
ale nie ma funkcji usuwania. Jak to osiągnąć?
Odpowiedzi:
W rzeczywistości aktualizuję ten wątek za pomocą nowszego rozwiązania 1-wierszowego:
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
Chodzi o to, aby filtrować tablicę, wybierając wszystkie elementy inne niż element, który chcesz usunąć.
Uwaga: usunie wszystkie wystąpienia.
EDYTOWAĆ:
Jeśli chcesz usunąć tylko pierwsze wystąpienie:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Przewiń listę w odwrotnej kolejności i użyj .splicemetody.
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
}
}
Odwrotna kolejność jest ważna, gdy wszystkie wystąpienia wyszukiwanego hasła muszą zostać usunięte. W przeciwnym razie licznik wzrośnie, a ty pominiesz elementy.
Gdy trzeba usunąć tylko pierwsze wystąpienie, zadziała również:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0nie jest automatycznie szybsze, jak na przykład w C. Oczywiście, o ile buforujesz limit, co skomplikowałoby sprawę, gdybyś kontynuował grę po pierwszym meczu (ale nie jeśli zatrzymasz się na nim).
Lista One Liners
Rozwiążmy ten problem dla tej tablicy:
var array = ['A', 'B', 'C'];
1. Usuń tylko pierwszą: Użyj Jeśli masz pewność, że element istnieje
array.splice(array.indexOf('B'), 1);
2. Usuń tylko ostatnie: Użyj Jeśli masz pewność, że element istnieje
array.splice(array.lastIndexOf('B'), 1);
3. Usuń wszystkie wystąpienia:
array = array.filter(v => v !== 'B');
Musisz znaleźć lokalizację tego, czego szukasz, a .indexOf()następnie usunąć ją za pomocą.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);
To zajmie się wszystkimi wystąpieniami.
Uncaught ReferenceError: array is not defined. Co jest nie tak?
.indexOf()jeszcze trochę więcej. Jeśli przekazana foundjako drugi argument do .indexOf()wywołania w pętli while , elementy w tablicy, które zostały już sprawdzone i skończyło się nie jest równe nie są ponownie sprawdzane: found = arr.indexOf(what, found);
Po prostu
array.splice(array.indexOf(item), 1);
-1jeśli nic nie zostanie znalezione i okrzyki, splice usunie 1 element z końca tablicy
Proste rozwiązanie (ES6)
Jeśli nie masz zduplikowanego elementu
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
Musisz napisać własne usunięcie. Możesz zapętlić tablicę, chwycić indeks elementu, który chcesz usunąć, i użyć go splicedo usunięcia.
Alternatywnie możesz utworzyć nową tablicę, zapętlić bieżącą tablicę, a jeśli bieżący obiekt nie pasuje do tego, co chcesz usunąć, umieść go w nowej tablicy.
posługiwać się:
array.splice(2, 1);
Spowoduje to usunięcie jednego elementu z tablicy, zaczynając od indeksu 2 (trzeci element)
array.splice(2,1)usunięcie 1 elementu o indeksie 2 z tablicy. sprawdź https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice po więcej szczegółów
użyj array.splice
/*array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension*/
array.splice(1,1)
Źródło: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
arrayi splicemusi być kropką.
.indexOf()i.splice()powinno załatwić sprawę. A może alternatywnie.filter().