wake-up-neo.com

Wie entferne ich ein Objekt mit JavaScript aus einem Array?

Ich habe ein JavaScript-Objekt wie dieses:

id="1";
name = "serdar";

und ich habe ein Array, das viele Objekte von oben enthält. Wie kann ich ein Objekt wie dieses aus dem Array entfernen:

obj[1].remove();
40
mavera

Nun splice funktioniert:

var arr = [{id:1,name:'serdar'}];
arr.splice(0,1);
// []

Verwenden Sie NICHT den Operator delete für Arrays.

Aber vielleicht möchtest du so etwas?

var removeByAttr = function(arr, attr, value){
    var i = arr.length;
    while(i--){
       if( arr[i] 
           && arr[i].hasOwnProperty(attr) 
           && (arguments.length > 2 && arr[i][attr] === value ) ){ 

           arr.splice(i,1);

       }
    }
    return arr;
}

Nur ein Beispiel unten.

var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
removeByAttr(arr, 'id', 1);   
// [{id:2,name:'alfalfa'}, {id:3,name:'joe'}]

removeByAttr(arr, 'name', 'joe');
// [{id:2,name:'alfalfa'}]
120
BGerrissen

Wenn Sie Zugriff auf die Funktionen von ES2015 haben und nach einem funktionaleren Ansatz suchen, würde ich Folgendes verwenden:

const people = [
  { id: 1, name: 'serdar' },
  { id: 5, name: 'alex' },
  { id: 300, name: 'brittany' }
];

const idToRemove = 5;

const filteredPeople = people.filter((item) => item.id !== idToRemove);

// [
//   { id: 1, name: 'serdar' },
//   { id: 300, name: 'brittany' }
// [

Beachten Sie jedoch, dass filter() nicht mutiert. Sie erhalten also ein neues Array zurück.

Siehe die Mozilla Developer Network-Hinweise zu Filter .

36

Sie können entweder die Methode splice() oder den Operator delete verwenden. 

Der Hauptunterschied besteht darin, dass beim Löschen eines Arrayelements mit dem Operator delete die Länge des Arrays nicht beeinflusst wird, selbst wenn Sie das letzte Element des Arrays löschen. Andererseits verschiebt die splice()-Methode alle Elemente so, dass keine Löcher an der Stelle des gelöschten Elements verbleiben.

Beispiel mit dem Operator delete:

var trees = ["redwood", "bay", "cedar", "Oak", "maple"];  
delete trees[3];  
if (3 in trees) {  
   // this does not get executed  
}
console.log(trees.length);  //  5
console.log(trees);         //  ["redwood", "bay", "cedar", undefined, "maple"]

Beispiel mit der splice()-Methode:

var trees = ["redwood", "bay", "cedar", "Oak", "maple"];  
trees.splice(3, 1);
console.log(trees.length);  //  4
console.log(trees);         //  ["redwood", "bay", "cedar", "maple"]
21
Daniel Vassallo

Ich benutze das ziemlich viel, also habe ich einen kleinen Prototyp erstellt. Sucht einfach nach dem Gegenstand und zieht ihn heraus, wenn es eine Übereinstimmung gibt.

//Prototype to remove object from array, removes first
//matching object only
Array.prototype.remove = function (v) {
    if (this.indexOf(v) != -1) {
        this.splice(this.indexOf(v), 1);
        return true;
    }
    return false;
}

Kann aufgerufen werden wie:

var arr = [12, 34, 56];
arr.remove(34);

Das Ergebnis wäre [12, 56].

Hat eine boolesche Rückgabe, wenn das Entfernen erfolgreich war, false, wenn das Element nicht vorhanden.

9

Wenn Sie den Index kennen, den das Objekt innerhalb des Arrays hat, können Sie splice () verwenden, wie bereits erwähnt,

var removedObject = myArray.splice(index,1);
removedObject = null;

Wenn Sie den Index nicht kennen, müssen Sie das Array danach durchsuchen, dh:

for (var n = 0 ; n < myArray.length ; n++) {
    if (myArray[n].name == 'serdar') {
      var removedObject = myArray.splice(n,1);
      removedObject = null;
      break;
    }
}

Marcelo

4
Marcelo
  //K.I.S.S. method
  //(the setup/comments is/are longer than the code)
  //cards is a two dimensional array object
  //  has an array object with 4 elements at each first dimensional index
  //var cards = new Array()
  //cards[cards.length] = new Array(name, colors, cost, type)
  //Can be constructed with Associated arrays, modify code as needed.
  //my test array has 60 'cards' in it
  //  15 'cards' repeated 4 times each
  //  groups were not sorted prior to execution
  //  (I had 4 groups starting with 'U' before the first 'A')
  //Should work with any dimensionality as long as first
  //index controls sort order

  //sort and remove duplicates
  //Algorithm:
  //  While same name side by side, remove higher entry;
  //  assumes 'cards' with same name have same other data
  //  (otherwise use cards[i-1] === cards[i] to compare array objects).
  //Tested on IE9 and FireFox (multiple version #s from 31 up).
  //Also tested by importing array data from 5MB text file.
  //Quick execution
  cards.sort()
  for (i=1; i<cards.length-1; i++){
    while (cards[i-1][0] == cards[i][0]){
       cards.splice(i,1)
    }
  }
1
James V. Fields

var arr = [{id:1,name:'serdar'}, {id:2,name:'alfalfa'},{id:3,name:'joe'}];
var ind = arr.findIndex(function(element){
   return element.id===2;
})
if(ind!==-1){
arr.splice(ind, 1)
}
console.log (arr)

Bitte beachten Sie, dass die findIndex-Methode in Internet Explorer nicht unterstützt wird. Polyfill kann jedoch von hier verwendet werden.

1
Manoj Yadav

Verwenden Sie die Methode splice .

(Zumindest gehe ich davon aus, dass dies die Antwort ist. Sie sagen, Sie haben ein Objekt, aber der Code, den Sie angeben, erstellt nur zwei Variablen und es gibt keine Anzeichen dafür, wie das Array erstellt wird.)

0
Quentin

Lösche das Schlüsselwort.

delete obj[1];

BEARBEITEN: See: Das Löschen von Array-Elementen in JavaScript - delete vs splice Delete löscht den Versatz, definiert aber den Eintrag nicht vollständig. Splice wäre richtig, wie David sagte.

0
Stefan Hoth
delete obj[1];

Beachten Sie, dass dadurch die Array-Indizes nicht geändert werden. Alle Array-Mitglieder, die Sie löschen, verbleiben als "Slots", die undefined enthalten.

0
Tomalak

var apps = [{id: 34, name: 'Meine App', ein anderes: 'thing'}, {id: 37, name: 'Meine neue App', ein anderes: 'things'}];

// Index des Objekts mit der ID: 37 abrufen

var removeIndex = apps.map (Funktion (Element) {return item.id;}). indexOf (37);

// Objekt entfernen

apps.splice (removeIndex, 1);

0
Suraj Sangani
var user = [
  { id: 1, name: 'Siddhu' },
  { id: 2, name: 'Siddhartha' },
  { id: 3, name: 'Tiwary' }
];

var recToRemove={ id: 1, name: 'Siddhu' };

user.splice(user.indexOf(recToRemove),1)
0
Siddhartha