// 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é