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ąć?
javascript
arrays
Rolando
źródło
źródło
.indexOf()
i.splice()
powinno załatwić sprawę. A może alternatywnie.filter()
.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']
źródło
Przewiń listę w odwrotnej kolejności i użyj
.splice
metody.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); }
źródło
0
nie 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');
źródło
PRÓBNY
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.
źródło
.indexOf()
, możesz dodać to do pliku javascript.Uncaught ReferenceError: array is not defined
. Co jest nie tak?.indexOf()
jeszcze trochę więcej. Jeśli przekazanafound
jako 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);
źródło
-1
jeśli nic nie zostanie znalezione i okrzyki, splice usunie 1 element z końca tablicyconst changedArray = array.filter( function(value) { return value !== 'B' });
lub możesz użyć:
const changedArray = array.filter( (value) => value === 'B');
Zmieniona tablica będzie zawierała bez wartości „B”
źródło
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; };
Demo online (skrzypce)
źródło
Musisz napisać własne usunięcie. Możesz zapętlić tablicę, chwycić indeks elementu, który chcesz usunąć, i użyć go
splice
do 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.
źródło
posługiwać się:
array.splice(2, 1);
Spowoduje to usunięcie jednego elementu z tablicy, zaczynając od indeksu 2 (trzeci element)
źródło
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ółówuż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
źródło
array
isplice
musi być kropką.