Mam tablicę, która wygląda następująco: var y = [1, 2, 3];
Chciałbym usunąć 2z tablicy y.
Jak mogę usunąć określoną wartość z tablicy za pomocą jQuery? Próbowałem, pop()ale to zawsze usuwa ostatni element.
Mam tablicę, która wygląda następująco: var y = [1, 2, 3];
Chciałbym usunąć 2z tablicy y.
Jak mogę usunąć określoną wartość z tablicy za pomocą jQuery? Próbowałem, pop()ale to zawsze usuwa ostatni element.
Odpowiedzi:
Działający JSFIDDLE
Możesz zrobić coś takiego:
var y = [1, 2, 2, 3, 2]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
Wynik:
[1, 3]
http://snipplr.com/view/14381/remove-item-from-array-with-jquery/
Za pomocą jQuery możesz wykonywać operacje na jednej linii w następujący sposób:
Przykład: http://jsfiddle.net/HWKQY/
y.splice( $.inArray(removeItem, y), 1 );
Używa natywnego .splice()i jQuery $.inArray().
whilepętli i zmiennej tymczasowej w następujący sposób:var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
.indexOf()zamiast z jQuery, ponieważ można użyć ostatniego indeksu znalezionego jako punkt wyjścia do następnego wyszukiwania, co jest znacznie wydajniejsze niż przeszukiwanie całej tablicy za każdym razem. var found=0; while ((found = y.indexOf(removeItem, found)) !== -1) y.splice(found, 1);
jQuery.filtermetoda jest przydatna. To jest dostępne dla Arrayobiektów.
var arr = [1, 2, 3, 4, 5, 5];
var result = arr.filter(function(elem){
return elem != 5;
});//result -> [1,2,3,4]
http://jsfiddle.net/emrefatih47/ar0dhvhw/
W Ecmascript 6:
let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
Możesz użyć underscore.js . To naprawdę sprawia, że wszystko jest proste.
W twoim przypadku cały kod, który będziesz musiał napisać to -
_.without([1,2,3], 2);
a wynikiem będzie [1,3].
Redukuje kod, który piszesz.
Nie jest to jQuery, ale ... Dlaczego nie użyć prostszego sposobu. Usuń „c” z poniższej tablicy
var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]
Możesz także użyć: (Uwaga dla siebie: Nie modyfikuj obiektów, których nie posiadasz )
Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = ['a','b','c'];
a.remove('c'); //value of "a" is now ['a','b']
Dodawanie jest prostszea.push('c')
//This prototype function allows you to remove even array from array
Array.prototype.remove = function(x) {
var i;
for(i in this){
if(this[i].toString() == x.toString()){
this.splice(i,1)
}
}
}
Przykład użycia
var arr = [1,2,[1,1], 'abc'];
arr.remove([1,1]);
console.log(arr) //[1, 2, 'abc']
var arr = [1,2,[1,1], 'abc'];
arr.remove(1);
console.log(arr) //[2, [1,1], 'abc']
var arr = [1,2,[1,1], 'abc'];
arr.remove('abc');
console.log(arr) //[1, 2, [1,1]]
Aby użyć tej prototypowej funkcji, musisz ją wkleić w kodzie. Następnie możesz zastosować go do dowolnej tablicy z „notacją kropkową”:
someArr.remove('elem1')
izostaje nadpisana.
Nie ma natywnego sposobu na zrobienie tego w Javascript. Zamiast tego możesz użyć biblioteki lub napisać małą funkcję: http://ejohn.org/blog/javascript-array-remove/
Możesz użyć .not działa w następujący sposób:
var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();
searchValuena 4, uruchomiłem kod, nie wykryto żadnego problemu. Wszystkie wartości były nadal obecne. @ JulianK
Moja wersja odpowiedzi user113716. Usuwa wartość, jeśli nie znaleziono dopasowania, co nie jest dobre.
var y = [1, 2, 3]
var removeItem = 2;
var i = $.inArray(removeItem,y)
if (i >= 0){
y.splice(i, 1);
}
alert(y);
To usuwa teraz 1 element, jeśli znaleziono dopasowanie, 0, jeśli nie znaleziono żadnego dopasowania.
Jak to działa:
value warraycountliczba wartości zaczynając index, więc po prostu chcą countz1//in case somebody needs something like this: multidimensional array (two items)
var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']];
var removeItem = 3;
ar = jQuery.grep(ar, function(n) {
return n[0] != removeItem; //or n[1] for second item in two item array
});
ar;
Istnieje proste rozwiązanie z łączeniem. Według W3School składnia splicingu jest następująca;
array.splice(index, howmany, item1, ....., itemX)
indeks Wymagane. Liczba całkowita określająca, w której pozycji dodawać / usuwać elementy. Użyj wartości ujemnych, aby określić pozycję od końca tablicy
ile wymagane Liczba elementów do usunięcia. Jeśli ustawione na 0, żadne elementy nie zostaną usunięte
item1, ..., itemX Opcjonalne. Nowe elementy do dodania do tablicy
Pamiętaj, że następujące js wyskoczy jeden lub więcej pasujących elementów z podanej tablicy, jeśli zostaną znalezione, w przeciwnym razie nie usuną ostatniego elementu tablicy.
var x = [1,2,3,4,5,4,4,6,7];
var item = 4;
var startItemIndex = $.inArray(item, x);
var itemsFound = x.filter(function(elem){
return elem == item;
}).length;
Lub
var itemsFound = $.grep(x, function (elem) {
return elem == item;
}).length;
Tak więc finał powinien wyglądać następująco
x.splice( startItemIndex , itemsFound );
Mam nadzieję że to pomoże.
Najpierw sprawdza, czy element istnieje w tablicy
$.inArray(id, releaseArray) > -1
powyższa linia zwraca indeks tego elementu, jeśli istnieje on w tablicy, w przeciwnym razie zwraca -1
releaseArray.splice($.inArray(id, releaseArray), 1);
teraz powyżej linii usunie ten element z tablicy, jeśli zostanie znaleziony. Podsumowując logikę poniżej, wymagany jest kod do sprawdzenia i usunięcia elementu z tablicy.
if ($.inArray(id, releaseArray) > -1) {
releaseArray.splice($.inArray(id, releaseArray), 1);
}
else {
releaseArray.push(id);
}
Miałem podobne zadanie, w którym musiałem usunąć wiele obiektów naraz, w oparciu o właściwość obiektów w tablicy.
Po kilku iteracjach kończę na:
list = $.grep(list, function (o) { return !o.IsDeleted });
Rozszerzyłbym klasę Array o pick_and_remove()funkcję, taką jak:
var ArrayInstanceExtensions = {
pick_and_remove: function(index){
var picked_element = this[index];
this.splice(index,1);
return picked_element;
}
};
$.extend(Array.prototype, ArrayInstanceExtensions);
Choć może się to wydawać nieco gadatliwe, możesz teraz wywoływać pick_and_remove()dowolną tablicę, którą chcesz!
Stosowanie:
array = [4,5,6] //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array; //=> [4,6]
Możesz to zobaczyć w akcji pokemona tutaj.
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
var difference = [];
for( var i = 0; i < array1.length; i++ ) {
if( $.inArray( array1[i], array2 ) == -1 ) {
difference.push(array1[i]);
}
}
return difference;
}
Następnie możesz wywołać tę funkcję w dowolnym miejscu kodu.
var I_like = ["love", "sex", "food"];
var she_likes = ["love", "food"];
alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"!
Działa to we wszystkich przypadkach i pozwala uniknąć problemów z powyższymi metodami. Mam nadzieję, że to pomaga!
Wypróbuj to, działa dla mnie
_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
`enter code here`},
Druga najbardziej pozytywna odpowiedź tutaj jest na najbliższym możliwym torze do jednowierszowej metody jQuery zamierzonego zachowania, którego chce OP, ale potknęli się na końcu swojego kodu i ma wadę. Jeśli element, który chcesz usunąć, nie znajduje się w tablicy, ostatni element zostanie usunięty.
Niektórzy zauważyli ten problem, a niektórzy zaproponowali sposoby obejścia tego problemu. Oferuję najkrótszą, najczystszą metodę, jaką mogłem znaleźć, i skomentowałem pod ich odpowiedzią sposób naprawy ich kodu zgodnie z tą metodą.
var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";
// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used
// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array
// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);
tablica x z łatwością usunie element „pa”, a tablica y pozostanie nietknięta.
Użycie argumentu $.inArray(removeItem,array)jako drugiego argumentu w rzeczywistości kończy się na długości splotu. Ponieważ element nie został znaleziony, ocenia to array.splice(-1,-1);, co po prostu spowoduje, że nic nie zostanie połączone ... wszystko bez konieczności pisania w tym celu pętli.
Aby bezpiecznie usunąć 2 z tablicy za pomocą waniliowego JavaScript:
// Define polyfill for browsers that don't natively support Array.indexOf()
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement, fromIndex) {
var k;
if (this===null) {
throw new TypeError('"this" is null or not defined');
}
var O = Object(this),
len = O.length >>> 0;
if (len===0) return -1;
var n = +fromIndex || 0;
if (Math.abs(n)===Infinity) n = 0;
if (n >= len) return -1;
k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
while (k < len) {
if (k in O && O[k]===searchElement) return k;
++k;
}
return -1;
};
}
// Remove first instance of 2 from array
if (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
/* To remove all instances of 2 from array, change 'if' to 'while':
while (y.indexOf(2) > -1) {
y.splice(y.indexOf(2), 1);
}
*/
console.log(y); // Returns [1, 3]
Źródło Polyfill: Mozilla
Żeby dodać odpowiedź Sarfraza, zdziwiłem się, że nikt nie zrobił jeszcze funkcji.
Użyj odpowiedzi z ddagsan przy użyciu metody .filter, jeśli masz tę samą wartość więcej niż jeden raz w tablicy.
function arrayRemoveVal(array, removeValue){
var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
return newArray;
}
var promoItems = [1,2,3,4];
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>