// state = {fields: {email: "", password: ""}}
4 Réponses :
Vous pouvez mapper des objets et tous les affecter à un seul objet.
const fields = ['email', 'password'], object = Object.assign({}, ...fields.map(key => ({ [key]: '' }))); console.log(object);
Chaque fois que vous cherchez à réduire un tableau de valeurs à une valeur, vous recherchez .reduce()
state = { fields: fields.reduce((acc, key) => ({...acc, [key]: ''}), {}), };
Vous devez transformer votre tableau qui contient des clés en un objet réel.
Pour ce faire, vous avez de nombreuses possibilités, mais vous devez encore faire quelque chose, il n'y a pas d'astuce magique.
Ma La solution préférée est d'utiliser une fonction à insérer dans votre classe Utilitaire. Il est donc facile à lire et réutilisable.
const fields = ['email', 'password']; const objFields = { ...fields.reduce((tmp, x) => { tmp[x] = ''; return tmp; }, {}), }; console.log(objFields);
const fields = ['email', 'password']; const objFields = {}; fields.forEach(value => { objFields[value] = ''; }); console.log(objFields);
function initializeKeys(keys, initialValue, object) { return keys.reduce((tmp, x) => { tmp[x] = initialValue; return tmp; }, object); } const objFields = initializeKeys(['email', 'password'], '', { otherKey: 'a', }); console.log(objFields);
Dans les navigateurs modernes , ou par en utilisant des polyfills , vous pouvez utiliser Object.fromEntries ()
pour créer un objet à partir d'un tableau, en utilisant les valeurs du tableau comme clés / propriétés, et remplir le les valeurs de l'objet avec une valeur par défaut.
const fields = ['email', 'password']; const result = Object.fromEntries(fields.map(value => [value, '']));
Le résultat est {email: "", password: ""}
.
Les champs
n'auront que deux valeurs?
fields.reduce ((acc, k) => (acc [k] = "", acc), {})
@brk qui est uniquement à des fins de simplicité