2017-10-30 5 views
0

I habe den folgenden Code (gut funktioniert)ES6 Objektzuordnung Vereinfachung

const action = { 
    type: types.CHANGE_ADMIN_USER_PASSWORD, 
    password: initialState.admin.editUserPassword.password, 
    confirm: initialState.admin.editUserPassword.confirmPassword, 
    ...input 
}; 

wo input{ password: 'hello' } oder { confirm: 'world' } ist. Der Wert kann unterschiedlich sein, aber nur ein Schlüssel ist vorhanden.

Frage: Gibt es eine Möglichkeit, den Code zu vereinfachen? zum Beispiel möchte ich initialState.admin.editUserPassword nur einmal haben. UPD: initialState.admin.editUserPassword hat mehr als zwei Eigenschaften, daher kann ich dieses Objekt nicht in action aufnehmen.

+4

'const {Passwort, confirmPassword} = initialState.admin.editUserPassword; conost action = {type: ..., password, confirm: confirmPassword, ... input} ' – Rajesh

+1

Beachten Sie, dass es sich bei diesem Restobjekt nicht um ES6 handelt, sondern um einen Vorschlag für Stufe 3. https://developer.mozilla.org/cs/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –

+0

Mit '... input' sieht es so aus, als würden Sie experimentelle Features verwenden, nicht nur ES6. –

Antwort

2

Der einfachste Weg destructuring wäre und nicht umbenennen confirmPassword zu confirm Sie können sogar Folgendes tun:

const action = { 
    type: types.CHANGE_ADMIN_USER_PASSWORD, 
    ...initialState.admin.editUserPassword, 
    ...input 
}; 
+0

Leider enthält dieses Objekt nicht nur diese beiden Eigenschaften. Vielen Dank! – dhilt

+0

@dhilt Wenn Sie sich Ihr anfängliches Beispiel anschauen, wollen Sie nicht, dass 'confirmPassword' in' confirm' umgewandelt wird, ..? – Keith

1

Sie Zerstörung über diesen Code verwenden können:

const { password, confirmPassword } = initialState.admin.editUserPassword; 

const action = { 
    type: types.CHANGE_ADMIN_USER_PASSWORD, 
    password, 
    confirm: confirmPassword, 
    ...input 
}; 

Wenn das verschachtelte Objekt (initialState.admin.editUserPassword) nur die beiden Felder hat (password, confirmPassword):

const {password, confirmPassword} = initialState.admin.editUserPassword; 
const action = { 
    type: types.CHANGE_ADMIN_USER_PASSWORD, 
    password: password, 
    confirm: confirmPassword, 
    ...input 
} 
+1

'Passwort: Passwort' kann auf' Passwort' verkürzt werden. Überprüfen Sie meinen Kommentar unter Frage – Rajesh

+0

Dies wird tatsächlich Ihren Code ein wenig beschleunigen, da das Holen verschachtelte Objekt Eigenschaft wie 'initialState.admin.editUserPassword.password' mehrmals ist langsamer als die Zuweisung dieser Wert zu Variable und später verwenden. Und macht Code auch lesbarer. –

+0

Ja, ich weiß, dass 'Passwort' gekürzt werden kann, aber ich persönlich mag diese Art von Syntax nicht. Für mich macht es Code weniger lesbar und verständlich. Wieder ist es nur meine Meinung. –