2017-04-25 7 views
0

Lassen Sie sagen, wir haben ein Objekt:Entfernen Duplikate mit hasOwnProperty

message { 
    diff: { 
    cat: "Tabby" 
    name: "Meow Meow" 
    } 
} 

Können Sie Duplikate mit hasOwnProperty überprüfen() und machen eine Entfernung der Duplikate? Beispiel

EDIT: Ich erkannte, dass es vielleicht Verwirrung gibt, worüber ich sprechen möchte. Ich habe eine Funktion, die auf jedes Formularelement wartet, das aktualisiert werden kann, das die Eingabe in Konsole protokolliert. Es hört hauptsächlich die Eigenschaftsnamen. Dies gibt sich selbst in ein Array aus, das Duplikate von Namen enthalten kann oder auch nicht.

Wenn wir die Formularfelder viele, viele Male aktualisiert, es wird:

Current Output: ['name', 'name', 'name', 'cat'] 
Desired Ouput: ['name', 'cat'] 
+1

Sie werden immer in unterschiedliche Eigenschaften haben 'diff' –

+0

Ja, aber ich muss überprüfen, ob die Eigenschaftsnamen existieren, und entfernen Sie es, bevor es zu einem Array hinzufügen. – Demon

+0

in Array vorhanden? –

Antwort

0

Sie Object.keys() verwenden können, Array.prototype.filter(), Array.prototype.includes() um zu überprüfen, ob die Eigenschaft eines Objekts ein Element des Arrays ist, Array.prototype.push(), Streuelement

+0

Ich glaube nicht, dass ich zusätzliche Eigenschaftsnamen hinzufügen muss. – Demon

+0

@Demon Was meinst du? Es werden keine Elemente in das Array 'arr' verschoben, es sei denn, das Element ist kein Element innerhalb des Arrays 'arr'. Die erste Deklaration von "Nachricht" zeigt, dass die doppelten Eigenschaftennamen nicht auf "arr" verschoben werden. Die zweite Erklärung von "Nachricht" hat eindeutige Eigenschaftsnamen bezüglich der Elemente von "arr"; Wenn die Eigenschaftsnamen für "arr" eindeutig sind, werden eindeutige Eigenschaften des Objekts "message.diff" in "arr" verschoben. Das ist Voraussetzung, ja? – guest271314

+0

Das Ergebnis ist, dass das Array 'arr' keine doppelten Elemente enthalten sollte. _ "Entfernen von Duplikaten mit hasOwnProperty" _ Die Elemente sind nicht auf Array festgelegt, daher sollte es keine Duplikate innerhalb des zu entfernenden Arrays geben. – guest271314

1

Überprüfen Sie, dass Schlüssel-Objekt existiert nicht im Array

for (key in message.diff) { 
    //outputs every change when all keys are updated 
    if (message.diff.hasOwnProperty(key) && this.uniqueArray.indexOf(key) == -1){ 
    this.uniqueArray.push(key); 
    } 
} 
+0

Sie sollten auch den 'hasOwnProperty'-Aufruf insgesamt löschen (oder [tun Sie es] (http://Stackoverflow.com/a/13296897/1048572) [richtig] (http://eslint.org/docs/rules/guard- for-in)) – Bergi

+0

@Bergi was meinst du damit. Bitte geben Sie ein Beispiel. Oder warum 'Object.hasOwnProperty (key)' ist falsch? Ich benutze es immer auf diese Weise –

+0

Dies ist sehr hilfreich. – Demon