2017-02-02 8 views
0

Ich habe ein Objekt:Wie lösche Objekt im Array Angular JS?

$scope.obj = { 
    name : "ok", 
    list : [{object},{object2}] 
} 

Also, ich habe {object1}. Wie kann ich dieses Objekt von list entfernen, wenn ich Schlüssel nicht weiß?

Mein Code ist:

var indexToDelete = list.people.keys(item); 
console.log(indexToDelete); 
delete list.people[indexToDelete]; 

Artikel ist:

Object 
$$hashKey: 
"object:29" 
artist:"" 
cover:"" 
song:"Basta 1" 
source:"" 
type:"9" 
+1

Ihre Liste ein Array ist, so jedes Element löschen Sie Spleiß verwenden können: http://stackoverflow.com/questions/5767325/how-to-remove-a-particular-element- from-a-array-in-javascript – Bagofjuice

+1

Verwenden Sie den $ index von ng-repeat, und verwenden Sie splice(), um den ausgewählten Index zu entfernen ... –

+0

Können Sie genauer darüber sein, was genau {object1} ist? Wie in, ist es buchstäblich ein Verweis auf das gleiche Objekt, das in 'list []' ist? Oder müssen Sie feststellen, ob eines der Objekte in 'list []' nur die gleichen Eigenschaften und Werte wie {object1} hat? http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects –

Antwort

0

Ich werde Ihre Datenstruktur nur ein wenig vereinfachen. Ich gehe auch davon aus, dass die $$hashKey verwendet werden kann, um zu bestimmen, ob das zu entfernende Objekt das gleiche wie eins in der Liste ist - wenn das nicht der Fall ist, und wir alle Schlüssel und Parameter innerhalb der Objekte vergleichen müssen Die Antwort bekommt ein bisschen mehr complex.

, hier diese Annahmen Gegeben ist ein Vanille-JavaScript-Version, die in allen gängigen Browsern funktionieren sollte:

var list = [ 
 
    {$$hashKey: 1, artist: "Alice"}, 
 
    {$$hashKey: 42, artist: "Bob"}, 
 
    {$$hashKey: 25, artist: "Charlie"} 
 
]; 
 

 
var itemToRemove = {$$hashKey: 42, artist: "Bob"}; 
 

 
for (var i=0; i<list.length;i++) { 
 
    if (list[i].$$hashKey == itemToRemove.$$hashKey) { 
 
    list.splice(i,1); // removes the matched element 
 
    i = list.length; // break out of the loop. Not strictly necessary 
 
    } 
 
} 
 

 
console.log(list);

Sie vereinfachen könnte, dass etwas, wenn itemToRemove auf ein Objekt ist eine Referenz, die ist In der Liste;

var obj1 = {$$hashKey: 1, artist: "Alice"}, 
 
    obj2 = {$$hashKey: 42, artist: "Bob"}, 
 
    obj3 = {$$hashKey: 25, artist: "Charlie"}; 
 

 
var list = [obj1, obj2, obj3]; 
 
var itemToRemove = obj2; 
 

 
for (var i=0; i<list.length;i++) { 
 
    if (list[i] === itemToRemove) { 
 
    list.splice(i,1); // removes the matched element 
 
    i = list.length; // break out of the loop. Not strictly necessary 
 
    } 
 
} 
 

 
console.log(list);

(Wenn Sie von ES6 sind transpiling gibt es durchaus ein paar neue Convenience-Methoden zur Verfügung, so dass Sie nicht: In diesem Fall können Sie sie nur direkt statt, je nach $$hashKey vergleichen Sie müssen das Array manuell durchlaufen: array.prototype.findIndex, array.prototype.filter, aber diese werden derzeit nicht in genügend Browsern unterstützt, um in der Produktion verwendet zu werden.Alternativ dazu können Sie _.without() verwenden, wenn Sie eine Bibliothek wie beispielsweise underscore.js hinzufügen möchten entfernen Sie bestimmte Elemente.)

-1

Sie können den delete Schlüsselwort machen und dann die Eigenschaft, die gelöscht werden muss.

Also, wenn Sie Object1 löschen müssen, zuerst mit der findIndex Methode finden Sie den Index in der Liste und dann können Sie verwenden.

var indexToDelete = $scope.obj.list.findIndex(YourCriteria); delete $scope.obj.list[indexToDelete];

Hinweis: findIndex Teil der ES7 Draft-Spezifikation ist, so bestimmter Browser möglicherweise nicht unterstützt diese Methode.

Edit1: Um mehr Klarheit zu bringen, die findIndex Methode nimmt einen Rückruf, die für jeden Wert in dem Array genannt wird.

+0

Ich erhalte einen Fehler: 'TypeError: # ist keine Funktion bei Array.findIndex (nativ) '. Hier: 'var indexToDelete = list.people.findIndex (Element); löschen list.people [indexToDelete]; ' – Darama

+0

$ scope.obj.list ist:' Array [3] : Objekt $$ HashKey : "Objekt: 31" Künstler : "" abdecken: „“ Song : „.. DND-Rückruf Benutzerdefinierte Rückruf, der übergeben wird Rückrufe an Dropzone und verwendet werden kann zwischen Quell- und Ziel Bereiche zu kommunizieren Die Dropzone können benutzerdefinierte Variablen zu diesem Rückruf passieren Dies verwendet werden kann Um Objekte ohne Serialisierung zu übertragen, siehe Demo. " Quelle : "" Typ : "9" ' – Darama

+0

können Sie Ihren Code veröffentlichen? – Agalo

0

Versuchen Sie Array splice() Methode.

Die splice() Methode ändert den Inhalt eines Arrays, indem vorhandene Elemente entfernt und/oder neue Elemente hinzugefügt werden.

Arbeits Demo:

var obj = { 
 
    name : "ok", 
 
    list : [ 
 
      {"name":"abc"}, 
 
      {"name":"xyz"} 
 
    ] 
 
} 
 

 
obj.list.splice(0, 1); 
 

 
console.log(obj);

0

Es gibt zwei Fall 1. Wenn Sie bereits als denselben Wert haben, wie Sie aus dem Array entfernen wollen, dann tun, um diese

$scope.obj = { 
    name : "ok", 
    list : [{object},{object2}] 
    } 
    var index =$scope.obj.list.indexOf({object}); 
    $scope.obj.list.splice(index,1); 

2. Wenn es das Problem ist, dass Sie das erste Element von arr entfernen möchten ay dann tun dies

$scope.obj.list.splice(0,1);