0
votes

Créer une carte des noms en fonction de la compétence JavaScript

J'ai zéro expérience en utilisant JavaScript et pourrait vraiment utiliser de l'aide. C'est aussi ma première publication sur la pile.

J'ai la liste suivante des étudiants: p> xxx pré>

Les instructions sont de renvoyer les noms suivants triés par groupe comme suit: p> xxx Pré>

Qu'est-ce que j'ai essayé jusqu'à présent est: p>

{ 'javascript,html,css,c#': 'John',
  'javascript,java,c,c#,c++,html': 'Brian',
  'c,c++,go,rust': 'Michael' }


0 commentaires

3 Réponses :


1
votes

Itérer sur chacun des compétences code> code> dans le Réduire code>. Testez pour voir si les compétences étant itératées sont sur la carte d'abord. Si ce n'est pas le cas, définissez sa valeur sur le tableau vide. Ensuite, appuyez sur le nom de l'étudiant à celui-ci:

p>

var student = [{
    id: 0,
    name: "John",
    skills: ["javascript", "html", "css", "c#"]
  },
  {
    id: 1,
    name: "Brian",
    skills: ["javascript", "java", "c", "c#", "c++", "html"]
  },
  {
    id: 2,
    name: "Michael",
    skills: ["c", "c++", "go", "rust"]
  }
];

function skills(student) {
  return student.reduce(function(map, { name, skills }) {
    skills.forEach((skill) => {
      if (!map[skill]) {
        map[skill] = [];
      }
      map[skill].push(name);
    });
    return map;
  }, {});
}

console.log(skills(student));


1 commentaires

Merci beaucoup, c'était la syntaxe dans le forach () que j'avais tout ce qui tort. Maintenant, j'ai juste besoin de comprendre comment trier le résultat par ordre alphabétique.



0
votes

Essayez ceci. et le problème de votre code est que vous traitez obj.skills , qui est un tableau à tort. Prendre un tableau car une clé de carte ne pouvait que travailler sans exception est parce que JavaScript l'évalue comme une chaîne.

Vous devez itérer obj.skills et mettre le nom des élèves dans le tableau au lieu de la réaffecter au lieu de la réaffecter. , Par conséquent, j'ai utilisé push méthode. xxx


2 commentaires

Ah, je vois ce qui se passe mal maintenant. Lorsque vous essayez d'utiliser la fonction foreach (), j'ai eu la mauvaise syntaxe à l'intérieur de la parenthèse. c'est à dire. "Compétences => {compétences: nom". ... La convention de dénomination était un peu déroutante lorsque j'ai essayé avant la main.


"Compétences => {compétences: nom" Cette syntaxe s'appelle Fonction de flèche , qui est similaire à C ++ Lambda Expression. Dans ce cas, il est complètement égal à "fonction (compétences) {}".



0
votes

Si vous êtes dans Node & ES2018 +, vous pouvez utiliser https: //www.npmjs. com / emballage / fluent-iterérable .

Ajoutez-le comme une dépendance à votre package.json Fichier: P>

console.log(
  fluent(student)
    .flatten(st => st.skills.map(sk => ({ name: st.name, skill: sk }))) // => [ { name, skill }, .. ]
    .group(o => o.skill) // => [ { key: skill, values: [ name, .. ] }, .. ]
    .toObject( // => { skill: [ name, .. ], .. }
      grp => grp.key,
      grp => fluent(grp.values).map(o => o.name).toArray()
    )
);


0 commentaires