1
votes

Existe-t-il un moyen d'attribuer une valeur à un élément en fonction de son emplacement dans une liste?

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.


1 commentaires

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


3 Réponses :


5
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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]


0 commentaires