2017-02-17 1 views
2

ich habe ab Objekt wie folgt:Iterate über JavaScript-Objekt und entfernen Array

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ] 

i zum Beispiel ID löschen wollen: 3 von Objekt und versucht, dieses:

 for (let key in _tempCards.cards) { 

      if (_tempCards.cards[key].id === 3) 
       delete _tempCards.cards[key]; 

    } 

Objekt sollte so aussehen

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 4}] ] 

, wie dieser Teil des Objekts löschen?

+2

Objekt zur Verfügung gestellt ist ungültig –

+0

@all falsches Duplikat. Es ist nicht woking, weil es ein Objekt in einem Array in einem Array in einem Objekt ist. Hat nichts zu tun mit der Antwort zur Verfügung gestellt. –

+0

@Zakaria Acharki Es ist kein Duplikat ... OP-Problem ist anders als das innerhalb des von Ihnen angegebenen Links. –

Antwort

3

Musste Ihr Objekt ein wenig umgestalten, damit es funktioniert.

var _tempCards = { 
 
    cards: [ 
 
    [{ 
 
     id: 1 
 
    }], 
 
    [{ 
 
     id: 2 
 
    }], 
 
    [{ 
 
     id: 3 
 
    }], 
 
    [{ 
 
     id: 4 
 
    }] 
 
    ] 
 
} 
 

 
for (var i = 0; i < _tempCards.cards.length; i++) { 
 
    if (_tempCards.cards[i][0].id == 3) { 
 
    _tempCards.cards.splice(i, 1); 
 
    } 
 
} 
 

 
console.log(_tempCards);

+0

Es ist klar, dass sein Datenobjekt defekt war. Sie mussten es also reparieren, indem Sie eine bestimmte Datenstruktur auswählten, die wahrscheinlich erschien. Allerdings erklärst du nicht, was du getan hast, und morgen werden sie wahrscheinlich den gleichen Fehler machen, nicht wissend, wo sie sich irren, und versuchen "dein Problem" * und ... weißt du was? Es wird nicht funktionieren. Es wird bevorzugt, dass Sie erklären, wo sie sich geirrt haben und wie sie ihre Methode verbessern könnten, um nicht den gleichen Fehler zu machen. Ich hoffe du bist damit einverstanden. Prost! –

+0

@AndreiGheorghiu Er vermisst eine eckige Klammer '[' direkt nach 'cards:' und Index des Elements '[0]' nach '[key]' (was falsch ist). –

+0

Ich glaube, du sollst ihnen das sagen. Weißt du, was sie aus deiner Antwort lernen werden? Anstatt zu lernen, wie man ihre Daten validiert, werden sie lernen, dass sie das Objekt aufsetzen müssen, und hoffen, dass ein netter Benutzer es umgestalten wird. Du hast meinen Standpunkt verstanden? –

0
_tempCards.cards=_tempCards.cards.filter(function(arr){ 
    return arr[0].id!==3;//allow every arrays first element, that hasnt an id of 3 
}); 

Sie die kühlen Array.prototype.filter nutzen könnten, Ihr Array zu filtern. Ihr Code funktioniert grundsätzlich, aber Sie müssen berücksichtigen, dass Ihr Array Arrays enthält, die Ihre Objekte enthalten.

for (let key in _tempCards.cards) { 
    if (_tempCards.cards[key][0].id === 3) 
      delete _tempCards.cards[key]; 
    } 
} 
1

Der Code, den Sie zur Verfügung gestellt ist kein Objekt, egal wie man es betrachtet.

{cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ] 

Lassen Sie uns es brechen:

  1. Sie öffnen ein Objekt, aber es nie schließen. Gut, machen wir es schließen ...
    {cards: [{id: 1}], [{id: 2}],[{id: 2}],[{id: 3}],[{id: 4}] ]}

  2. Sie Now (Art) haben ein Objekt und die erste Eigenschaft (cards) enthält ein Array mit einem einzelnen Objekt: [{id:1}], als Sie haben ein Haufen andere Eigenschaften ohne Schlüssel, die mit cards auf dem gleichen Niveau sind, sind sie in der cards Eigentum Ihrer Eltern-Objekt nicht, wie ich glaube, Sie gedacht ...

  3. ... und Sie sind auch schließen ein Array nach dem letzten keyless Eigenschaft, die ich keine Ahnung habe, wo Sie angefangen haben (/ wollte starten, aber vergessen), also musste ich das entfernen, um ein gültiges Objekt zu bekommen.

Meine beste Vermutung an, was Ihr Ziel sollte aussehen soll:

{ cards: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ] } 

oder verschönert ...

Object = { 
    cards: [{ 
    id: 1 
    }, 
    { 
    id: 2 
    }, 
    { 
    id: 3 
    }, 
    { 
    id: 4 
    }] 
} 

Sie jetzt ein Array von Objekten in der haben cards Eigentum von Object.Eine weitere wahrscheinliche Datenstruktur wäre

Dies ist die Struktur, die @KindUser am wahrscheinlichsten für Ihre Daten angenommen wird.


Fazit:, ist es ganz klar, Ihr Objekt "Mann gemacht" ist. Und es ist falsch. Sie benutzen entweder ein Werkzeug, um Ihre Daten zu validieren und zu visualisieren (suchen Sie nach "JSON-Viewer", "verschönern Sie js", etc ...) oder Sie achten mehr auf das, was Sie tun.