2017-04-13 6 views
1

Ich habe ein Objekt, das ich mit einer For-in-Schleife Schleife, die durch das Objekt durchläuft, um den Schlüssel und Wert zu finden.Speichern ersetzten Wert in ein anderes Array von einem Objekt

house: { 
    john: { 
     love_off: "mary" 
    } 
} 

Meine in Schleife wieder:

for (var key in house.john) { 
    house.john[key.replace("_off","") = house.john[key]; 
} 

Es erstellt eine Kopie der Original-Array zurückgibt lange mit:

house: { 
     john: { 
      love: "mary" 
      love_off: "mary" 
     } 
    } 

Wie bekomme ich von dem Objekt nur "love": "mary" und es hinzufügen zu Array, das zurückgegeben werden muss?

+0

Sie müssen die 'love_off' Paar mit dem neuen' love' Paar ersetzen? –

+0

Kein Array erscheint bei 'Javascript' in Frage. Wird das resultierende Objekt erwartet? Versuchen Sie, die neue Eigenschaft und den Wert zu bekommen? – guest271314

+0

Ich versuche nur, die neue Eigenschaft und Wert zu bekommen. Ich habe falsch gesprochen. Ich entschuldige mich – Demon

Antwort

1

Sie müssen delete Anweisung verwenden, um die alte Eigenschaft zu löschen.

Der Löschoperator entfernt eine Eigenschaft von einem Objekt.

var object={ 
 
    "house": { 
 
    "john": { 
 
     "love_off": "mary" 
 
    } 
 
    } 
 
} 
 
for (var key in object.house.john) {   
 
    object.house.john[key.replace("_off","")] = object.house.john[key]; 
 
    if(object.house.john.hasOwnProperty(key)) 
 
     delete object.house.john[key]; 
 
} 
 
console.log(object);

+1

müssen möglicherweise überprüfen, ob die Eigenschaft zuerst – charlietfl

+0

@charlietfl existiert, aktualisierte ich meine Antwort. Danke für deinen Punkt. –

+1

Vorschlag ... benutze hasOwnProperty() ... Wert der Eigenschaft könnte falsy sein, aber immer noch existieren. Und würde vor Änderungen überprüfen – charlietfl

0

versuchen, diese

var myArray= [] 
for (var key in object.house.john) {   
    object.house.john[key.replace("_off","")] = object.house.john[key]; 
    delete object.house.john[key]; 
    myArray.push(object.house.john); 
} 
1

Falls die Frage richtig zu interpretieren, Sie JSON.stringify(), JSON.parse() mit .replace()

data = JSON.parse(JSON.stringify(data).replace(/_off(?=":)/, "")); 
+0

Gute Antwort !! Aber prüfen Sie, ob es mehrere Eigenschaften mit "_off" geben könnte und mit der Methode 'String.prototype.replace()' wird nur das erste Vorkommen ersetzt –

+0

@YosvelQuintero Die 'RegExp' kann angepasst werden. Andere Objekte als OP wurden vor der Antwort nicht berücksichtigt – guest271314

0

können Sie kann über alle Objektschlüssel mit Object.keys() über Array.prototype.forEach() durchlaufen werden.

Als die Ersetzung und die wichtigste ist, die alte Schlüsseleigenschaft zu löschen.

Code-Beispiel:

var obj = {house: {john: {love_off: "mary"}}}; 
 

 
Object.keys(obj.house.john).forEach(function (k) { 
 
    obj.house.john[k.replace('_off', '')] = obj.house.john[k]; 
 
    delete obj.house.john[k]; 
 
}); 
 

 
console.log(obj);

Verwandte Themen