J'ai six lettres [a,b,c,d,e,f]
et deux utilisateurs [bob,bender]
. Ils ont tous les deux une disposition différente des lettres qui les représente, pense que la personnalité est un score. Bob est [e,f,c,b,a,d]
et Bender est [b,a,d,f,e,c]
.
J'ai aussi un tableau pour les mettre. Chaque lettre, dans l'ordre, a sa propre barre sur le graphique et les graduations vont jusqu'à 6.
Selon l'endroit où la lettre apparaît dans la liste, une valeur numérique lui est attribuée. La première lettre a une valeur de 6, la seconde une valeur de 5, et ainsi de suite.
Le tableau final doit être dans l'ordre abc, mais avec la valeur correcte pour chaque lettre. Exemple: Bob finirait avec [2,3,4,1,6,5]
.
Comment ferais-tu ceci?
La seule façon dont je peux comprendre est une tonne de déclarations if et j'essaie de voir s'il y a une meilleure façon.
Je suis encore nouveau dans Javascript.
3 Réponses :
Vous pouvez utiliser Array.map()
et Array.indexOf()
.
const final = arr => letters.map(e => 6 - arr.indexOf(e) ) );
Voici une fonction qui peut être utilisée:
const bob = ['e','f','c','b','a','d']; const bender = ['b','a','d','f','e','c'] const letters = ['a','b','c','d','e','f'] const bobFinal = letters.map(e => 6 - bob.indexOf(e) ); const benderFinal = letters.map(e => 6 - bender.indexOf(e) ); console.log(bobFinal); console.log(benderFinal);
Il vous suffit de mapper les lettres et d'utiliser leur index en séquence bobs pour extraire le score.
const letters = ['a','b','c','d','e','f']; const scores = [6,5,4,3,2,1]; const bob = ['e','f','c','b','a','d']; const bobScore = letters.map(letter=>scores[bob.indexOf(letter)]) console.log(bobScore);
Cette approche prend les indices du tableau bob
donné, le trie avec les valeurs croissantes et mappe le delta de la longueur et de la valeur réelle.
Cette solution respecte plus d'une même valeur.
const bob = ['e', 'f', 'c', 'b', 'a', 'd'], result = [...bob.keys()] .sort((a, b) => bob[a].localeCompare(bob[b])) .map((i, _, { length }) => length - i); console.log(result); // [2, 3, 4, 1, 6, 5]
J'utiliserais un tableau d'objets avec à la fois des lettres et des nombres afin que vous gardiez les numéros d'origine et que vous puissiez toujours les trier ou en générer le tableau de nombres plats