Je vais recevoir un tableau de chaînes de texte Label pour correspondre aux valeurs dans un tableau. La matrice d'objets est statique mais la matrice de chaînes de texte sera dynamique de l'entrée de l'utilisateur. Je veux connaître la meilleure façon ES6 de la configuration à l'aide du filtre ou de la carte.
Voici la matrice statique d'objets: p> Ceci est un exemple de la matrice des clés, je vais obtenir: p> afin que les résultats que je souhaite obtenir sont un tableau avec les valeurs: p> J'ai des moyens de faire cela en vérifiant sur une valeur de chaque valeur, je ne sais tout simplement pas quoi utiliser comme filtre, mapper, réduire ou trouver. P> p>
3 Réponses :
Nous pouvons utiliser la fonction de filtrage et cartographique de JS pour cela.
p>
let test = [ "0-2", "1-2", "2-0", "3-1" ]; let counts = [{ label: '0-0', value: 1 }, { label: '0-1', value: 2 }, { label: '0-2', value: 3 }, { label: '1-0', value: 4 }, { label: '1-1', value: 5 }, { label: '1-2', value: 6 }, { label: '2-0', value: 7 }, { label: '2-1', value: 8 }, { label: '2-2', value: 9 }, { label: '3-0', value: 10 }, { label: '3-1', value: 11 }, { label: '3-2', value: 12 }, ]; let answer = counts.filter(item => ( test.includes(item.label) )).map(item => item.value) console.log(answer);
Vous pouvez utiliser p> array # réduire code> et ajouter la valeur de l'étiquette correspondante en cette option à l'aide de
tableau # Rechercher code>.
const counts = [{ label: '0-0', value: 1 }, { label: '0-1', value: 2 }, { label: '0-2', value: 3 }, { label: '1-0', value: 4 }, { label: '1-1', value: 5 }, { label: '1-2', value: 6 }, { label: '2-0', value: 7 }, { label: '2-1', value: 8 }, { label: '2-2', value: 9 }, { label: '3-0', value: 10 }, { label: '3-1', value: 11 }, { label: '3-2', value: 12 }, ],
input = [ "0-2", "1-2", "2-0", "3-1" ],
output = input.reduce((arr, label) => {
const matched = counts.find(o => o.label === label);
if(matched) arr.push(matched.value);
return arr;
},[]);
console.log(output);
Vous pouvez créer un En utilisant ceci approche, vous aurez besoin de boucler à travers votre tableau code> une fois une fois et votre tableau d'étiquettes ( p> mapper code> qui agira comme une table de recherche (
lut code>) pour les étiquettes et leurs valeurs associées. Utilisation de la carte
code> Vous pouvez alors
.map () code> Votre tableau d'étiquettes pour être la valeur de la carte code> objet.
Art code>) une fois, ce qui vous permettra d'éviter " vérifier chaque valeur un par un em> ", vous fournissant une complexité de ~ o (n + k), plutôt que o (nk): p>
const counts = [{label:"0-0",value:1},{label:"0-1",value:2},{label:"0-2",value:3},{label:"1-0",value:4},{label:"1-1",value:5},{label:"1-2",value:6},{label:"2-0",value:7},{label:"2-1",value:8},{label:"2-2",value:9},{label:"3-0",value:10},{label:"3-1",value:11},{label:"3-2",value:12}];
const arr = ["0-2", "1-2", "2-0", "3-1"];
const lut = new Map(counts.map(({label, value}) => [label, value]));
const res = arr.map(label => lut.get(label));
console.log(res);
.Find code>. Mais cela vérifiera également chaque valeur un par un.