Hoe specifieke waarde uit de array te verwijderen met jQuery

Ik heb een array die er als volgt uitziet: var y = [1, 2, 3];

Ik wil 2van array yverwijderen.

Hoe kan ik een bepaalde waarde van een array verwijderen met jQuery? Ik heb het pop()geprobeerd, maar die altijd het laatste element verwijdert.


Antwoord 1, Autoriteit 100%

Een werkende JSFiddle

U kunt zoiets doen:

var y = [1, 2, 2, 3, 2]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
  return value != removeItem;
});

resultaat:

[1, 3]

http://snipplr.com/view/14381/Remove-item- van-array-with-jQuery /


Antwoord 2, Autoriteit 59%

Met jQuery kunt u een single-line-operatie doen zoals deze:

Voorbeeld: http://jsfidddle.net/hwkqy/

y.splice( $.inArray(removeItem, y), 1 );

Gebruikt de inheemse .splice()en jQuery’s $.inArray().


Antwoord 3, Autoriteit 10%

jQuery.filtermethode is handig. Dit is beschikbaar voor Arrayobjecten.

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/

In Ecmascript 6:

let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);

https://jsfiddle.net/emrefatih47/nnn3c2fo/


Antwoord 4, autoriteit 5%

Geen jQuery-manier, maar…
Waarom gebruik je geen eenvoudigere manier. Verwijder ‘c’ uit de volgende array

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]

Je kunt ook het volgende gebruiken: (Opmerking voor mezelf: Wijzig geen objecten waarvan u niet de eigenaar bent)

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']

Toevoegen is eenvoudigera.push('c')


Antwoord 5, autoriteit 5%

Je kunt underscore.jsgebruiken. Het maakt dingen echt eenvoudig.

In jouw geval is alle code die je moet schrijven –

_.without([1,2,3], 2);

en het resultaat is [1,3].

Het vermindert de code die je schrijft.


Antwoord 6, autoriteit 4%

Item in array verwijderen

var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);

Antwoord 7, Autoriteit 2%

//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)
        }
    }
}

Voorbeeld van het gebruik

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]]

Om deze prototype-functie te gebruiken, moet u deze in uw code plakken.
Dan kunt u deze toepassen op elke array met ‘DOT NOTATION’:

someArr.remove('elem1')

Antwoord 8

Controleert eerst of het element in de array

bestaat

$.inArray(id, releaseArray) > -1

Bovenstaande lijn retourneert de index van dat element als deze in de array bestaat, anders retourneert het -1

releaseArray.splice($.inArray(id, releaseArray), 1);

Nu bovenstaande lijn verwijdert dit element van de array indien gevonden. Om de onderstaande logica samen te vatten, is de vereiste code om het element van array te controleren en te verwijderen.

 if ($.inArray(id, releaseArray) > -1) {
                releaseArray.splice($.inArray(id, releaseArray), 1);
            }
            else {
                releaseArray.push(id);
            }

Antwoord 9

Er is geen native manier om dit in JavaScript te doen. Je zou een bibliotheek kunnen gebruiken of een kleine functie schrijven om dit in plaats daarvan te doen: http: // ejohn. Org / blog / javascript-array-verwijderen /


Antwoord 10

u kunt. Not-functie als volgt:

var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;
var newArr = $(arr).not([searchValue]).get();

Antwoord 11

//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;

Antwoord 12

Mijn versie van het antwoord van User113716. Zijn verwijdert een waarde als er geen overeenkomst wordt gevonden, wat niet goed is.

var y = [1, 2, 3]
var removeItem = 2;
var i = $.inArray(removeItem,y)
if (i >= 0){
    y.splice(i, 1);
}
alert(y);

Hiermee verwijdert u nu 1 item als er een overeenkomst is gevonden, 0 als er geen overeenkomsten worden gevonden.

Hoe het werkt:

  • $. Inarray (waarde, array) is een jQuery-functie die de eerste index van een valuein een Array
  • vindt

  • Het bovenstaande retourneren -1 Als de waarde niet wordt gevonden, controleer dan of ik een geldige index is voordat we de verwijdering doen. Index -1 verwijderen betekent het verwijderen van de laatste, die hier niet nuttig is.
  • .SPLICE (INDEX, COUNT) Verwijdert countAantal waarden vanaf index, dus we willen gewoon een countvan 1

Antwoord 13

Het op een na meest geüpvoted antwoord hier is op het dichtstbijzijnde nummer mogelijk voor een jQuery-methode met één voering van het beoogde gedrag, de OP WANNING, maar ze stuitten aan het einde van hun code en het heeft een fout. Als uw item die moet worden verwijderd, niet in de array is, wordt het laatste item verwijderd.

Enkelen hebben dit probleem opgemerkt en sommige hebben manieren aangeboden om door te gaan om hiertegen te bewaken. Ik bied de kortste, schoonste methode die ik kon vinden, en ik heb geclassificeerd onder hun antwoord op de manier om hun code op te lossen volgens deze methode.

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);

ARRAY X Verwijder het element “Bye” eenvoudig, en de array y zal onaangeroerd zijn.

Het gebruik van het argument $.inArray(removeItem,array)Als een tweede argument eindigt eigenlijk de lengte om te splitsen. Aangezien het artikel niet is gevonden, evalueert dit naar array.splice(-1,-1);, die alleen maar resulteert in niets dat wordt gesplitst … alles zonder een lus hiervoor te hoeven schrijven.


Antwoord 14

Er is een eenvoudige oplossing met splice. Volgens W3Schoolvolgt de splice-syntaxis;

array.splice(index, howmany, item1, ....., itemX)

indexVereist. Een geheel getal dat aangeeft op welke positie items moeten worden toegevoegd/verwijderd. Gebruik negatieve waarden om de positie vanaf het einde van de array op te geven

hoeveelvereist. Het aantal items dat moet worden verwijderd. Indien ingesteld op 0, worden er geen items verwijderd

item1, …, itemXOptioneel. De nieuwe item(s) die aan de array moeten worden toegevoegd

Houd er rekening mee dat de volgende js een of meer overeenkomende items uit de gegeven array zullen laten verschijnen als ze worden gevonden, anders zou het laatste item van de array niet worden verwijderd.

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;

Of

var itemsFound = $.grep(x, function (elem) {
                              return elem == item;
                           }).length;

Dus de finale zou er als volgt uit moeten zien

x.splice( startItemIndex , itemsFound );

Hopelijk helpt dit.


Antwoord 15

Ik had een vergelijkbare taak waarbij ik meerdere objecten tegelijk moest verwijderen op basis van een eigenschap van de objecten in de array.

Dus na een paar iteraties eindig ik met:

list = $.grep(list, function (o) { return !o.IsDeleted });

Antwoord 16

Ik zou de array-klasse verlengen met een pick_and_remove()functie, zoals SO:

var ArrayInstanceExtensions = {
    pick_and_remove: function(index){
        var picked_element = this[index];
        this.splice(index,1);
        return picked_element;
    } 
};
$.extend(Array.prototype, ArrayInstanceExtensions);

Hoewel het misschien een beetje uitgebreid lijkt, kunt u nu bellen met pick_and_remove()op elke array die u mogelijk wilt!

Gebruik:

array = [4,5,6]           //=> [4,5,6]
array.pick_and_remove(1); //=> 5
array;                    //=> [4,6]

U kunt dit alles bekijken in Pokemon-thema-actie hier.


Antwoord 17

/** 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;
}  

U kunt vervolgens de functie overal in uw code bellen.

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"!

Dit werkt in alle gevallen en vermijdt de problemen in de bovenstaande methoden. Hoop dat dat helpt!


Antwoord 18

Probeer dit, het werkt voor mij

_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
   _clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
   console.log(_clientsSelected);
`enter code here`},

Antwoord 19

Om 2 veilig uit de array te verwijderen met vanilla 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]

Polyfill-bron: Mozilla


Antwoord 20

Om toe te voegen aan het antwoord van Sarfraz, het verbaast me dat nog niemand er een functie van heeft gemaakt.

Gebruik het antwoord van ddagsan met behulp van de .filter-methode als u dezelfde waarde meer dan eens in uw array heeft.

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>

Other episodes