2016-12-30 3 views
0

Ich drücke auf Objekte, während ich auf die Schaltfläche mit Reactjs klicke. Anfangs habe ich drei Arten von Objekten wie "LOCAL", "GLOBAL" und "MAIN". Ich übergebe diese Namen als Parameter im Onclock-Callback. Wie vermeidet man das Einfügen von Duplikaten mit reactJs?Wie Duplikate im Array von Objekten in reactJs entfernen?

meinen Code machen,

<div> 
    <input type="checkbox" onClick={this.checkedIn.bind(this, "LOCAL", "12")} /> 
    <button type="checkbox" onClick={this.checkedIn.bind(this, "GLOBAL", "15")} /> 
    <button type="checkbox" onClick={this.checkedIn.bind(this, "MAIN", "11")} /> 
    <button type="checkbox" onClick={this.checkedIn.bind(this, "MAIN", "13")} /> 
</div> 

Onclick-Ereignis

var objectVale = []; 
checkedIn(type, value) { 
    objectVale.push({ 
    type:type, 
    value:[value] 
    }) 
} 

Erwartet Ausgabe,

[ 
    { 
    "type":"LOCAL", 
    "value":[12] 
    }, 
    { 
    "type":"GLOBAL", 
    "value":[15] 
    }, 
    { 
    "type":"MAIN", 
    "value":[11, 13] 
    } 
] 

Antwort

1

Sie könnten so etwas wie dies versuchen:

var objectVale = []; 
checkedIn(type, value) { 

    var index = objectValue.findIndex(function(obj){ return obj.type === type; }); 
    if(index === -1){ // Object with the specific type not found. 
     objectValue.push({ 
      type:type, 
      value:[value] 
     }) 
    } else { // Object with the specific type found. So push only the value. 
     objectValue[index].value.push(value) 
    } 
} 
+0

Auch würde ich vorschlagen, '.find' verwenden. Auf diese Weise müssen Sie das Objekt nicht mithilfe des Index abrufen. – Rajesh

+0

@Rajesh Ich würde sagen, dass beide Wege gültig sind. – Christos

+0

Wenn ich dieses Kontrollkästchen deaktiviere, sollte auch das Kontrollkästchen deaktiviert sein. Ich habe es so versucht, var mainValues ​​= []; mainValues.push (Wert); var sameValueIndex = mainValues.indexOf (Wert); mainValues.splice (selbeValueIndex, 1); Aber es gibt kein korrektes Ergebnis – Sathya

1

Ausgabe wird Sie drängen Wert für jeden Klick-Ereignis. Suchen Sie stattdessen zuerst das Array und suchen Sie das erforderliche Objekt unter Verwendung von type und drücken Sie dann den Wert auf das Array des Wertes dieses Objekts.

var o = objectVale.find(function(x) { 
    return x.type === type; 
}) 

if (o) { 
    o.value = o.value || []; 
    o.value.push(value); 
} else { 
    objectVale.push({ 
    type: type, 
    value: [value] 
    }) 
} 
Verwandte Themen