2
votes

Retourne l'objet avec les valeurs par défaut du tableau en Javascript

// state = {fields: {email: "", password: ""}}

3 commentaires

Les champs n'auront que deux valeurs?


fields.reduce ((acc, k) => (acc [k] = "", acc), {})


@brk qui est uniquement à des fins de simplicité


4 Réponses :


2
votes

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);


0 commentaires

3
votes

Chaque fois que vous cherchez à réduire un tableau de valeurs à une valeur, vous recherchez .reduce()

state = {
  fields: fields.reduce((acc, key) => ({...acc, [key]: ''}), {}),
};


0 commentaires

2
votes

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.


numéro 1: La fonction

const fields = ['email', 'password'];

const objFields = {
  ...fields.reduce((tmp, x) => {
    tmp[x] = '';

    return tmp;
  }, {}),
};

console.log(objFields);

numéro 2: Le forEach

const fields = ['email', 'password'];

const objFields = {};

fields.forEach(value => {
  objFields[value] = '';
});

console.log(objFields);

numéro 3: La réduction

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);


0 commentaires

0
votes

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: ""} .


0 commentaires