Maison  >  Questions et réponses  >  le corps du texte

Comment renvoyer des paires clé-valeur à partir de la fonction map à l'aide de l'opérateur spread

<p>J'ai un objet et un tableau. Hypothèse :</p> <pre class="brush:php;toolbar:false;">const premier = { 'key1' : 'un rendez-vous', 'key2' : "un rendez-vous" } const seconde = ['key3', 'key4']</pre> <p>Utilisez ensuite une syntaxe étendue pour les fusionner en un seul objet. Pour chaque élément du tableau, je souhaite créer une nouvelle paire clé-valeur et la placer dans cet objet fusionné. Actuellement, je ne peux renvoyer que des objets de la fonction map, pas des paires clé-valeur. Comment changer cela ? </p> <pre class="brush:php;toolbar:false;">const combiné = { ...d'abord, ...second.map(key => ({ [key]: new Date() })) // Renvoie des paires clé-valeur au lieu d'objets }</pré> <p>Le résultat obtenu : </p> <pre class="brush:php;toolbar:false;">{ '0' : { key3 : 'une date' }, '1' : { key4 : 'une date' }, key1 : « un rendez-vous », key2 : « un rendez-vous » }</pré> <p>Le résultat que je souhaite :</p> <pre class="brush:php;toolbar:false;">{ key1 : « un rendez-vous », key2 : « un rendez-vous », key3 : « un rendez-vous », key4 : « un rendez-vous » }</pré> <p><br /></p>
P粉253800312P粉253800312434 Il y a quelques jours451

répondre à tous(1)je répondrai

  • P粉925239921

    P粉9252399212023-08-14 14:46:08

    Je ne peux pas faire ça. map Génère un array (où chaque valeur est le résultat du passage de la valeur à l'index correspondant dans le tableau d'origine à la fonction). Si vous développez le tableau en un objet, vous obtiendrez l'index (numéro) comme nom de propriété et la valeur comme valeur.

    Si vous voulez commencer par un tableau et terminer par un objet, alors map就是错误的工具。请改用reducen'est pas le bon outil. Veuillez utiliser reduce à la place.

    Similaire au code suivant :

    const combined = second.reduce(
        (prev, curr) => {
            return {
                ...prev,
                [curr]: new Date()
            };
        },
        first
    );
    

    répondre
    0
  • Annulerrépondre