-1
votes

Essayer de trouver plusieurs objets de la matrice lorsque vous avez donné plusieurs clés dans un tableau

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: xxx

Ceci est un exemple de la matrice des clés, je vais obtenir: xxx

afin que les résultats que je souhaite obtenir sont un tableau avec les valeurs: xxx

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.


1 commentaires

.Find . Mais cela vérifiera également chaque valeur un par un.


3 Réponses :


1
votes

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


0 commentaires

0
votes

Vous pouvez utiliser array # réduire code> et ajouter la valeur de l'étiquette correspondante en cette option à l'aide de tableau # Rechercher code>.

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 }, ],
      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);


0 commentaires

0
votes

Vous pouvez créer un 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.

En utilisant ceci approche, vous aurez besoin de boucler à travers votre tableau code> une fois une fois et votre tableau d'étiquettes ( 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>

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


0 commentaires