3
votes

Javascript vérifie si la chaîne existe dans le tableau d'objets

J'ai deux tableaux dans mon programme, l'un contient une liste de chaînes qui agissent comme des clés, l'autre contient des objets qui contiennent également une clé.

[{key : "WIHUGDYVWJ", className : 'math'},{key : "likubqwd", className : 'robotics'}]

Je dois renvoyer un autre tableau qui contient des objets tels que classesInList uniquement si la clé (en tant que propriété className) existe dans classKeys

Par exemple, dans ce scénario, je devrais vérifier les classKeys par rapport aux classesInList et créer un tableau avec deux éléments:

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];

puisque l'anglais n'est pas dans les classKeys, il est supprimé de classesInList. Comment procéder?

Note latérale: J'utilise react native donc j'ai accès aux propriétés et fonctions d'es6.

Je suis complètement coincé dans ce sens. Aussi simple que cela puisse paraître, je ne trouve pas de réponse.


1 commentaires

Probablement en utilisant filtre . Qu'est-ce que tu as essayé jusque-là? Qu'est ce qui ne s'est pas bien passé? Montrez votre meilleure tentative et expliquez le problème que vous avez rencontré (erreurs, résultats inattendus, etc.)


5 Réponses :


1
votes

Vous pouvez utiliser le filtre et vérifiez si le className de l'élément est dans le tableau classKeys :

let classKeys = ["math", "robotics"];
let classesInList = [
  { key: "WIHUGDYVWJ", className: "math" },
  { key: "qwljdhkuqwdnqwdk", className: "english" },
  { key: "likubqwd", className: "robotics" }
];

let result = classesInList.filter(element => {
  return classKeys.indexOf(element.className) !== -1;
});

console.log(result);


0 commentaires

4
votes

Utilisez simplement Array. prototype.filter et combinez-le avec Array.prototype.includes . Ce que vous voulez faire, c'est filtrer le tableau d'objets classesInList et ne sélectionner que ceux dont la valeur className est présente dans le tableau classKeys .

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'}];

let filteredClasses = classesInList.filter(cls => classKeys.includes(cls.className));

console.log(filteredClasses);


0 commentaires

0
votes

l'utilisation de filter filtrera votre tableau, en utilisant some pour savoir si certaines des valeurs sont conformes à vos critères et enfin en utilisant includes pour vérifiez si la valeur est incluse dans vos classKeys.

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];


const result = classesInList
               .filter(c => 
                  Object.values(c).some(val => 
                                        classKeys.includes(val)
                  )
                );

console.log(result);


0 commentaires

0
votes

Utilisez la déstructuration avec Array .prototype.filter et Array.prototype.includes :

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'}];

let filtered = classesInList.filter(({ className }) => classKeys.includes(className));

console.log(filtered);


0 commentaires

0
votes

Vous pouvez le faire dans ES6 en utilisant le filtre , inclut et la destruction d'objet:

const classKeys = ['math', 'robotics'];
const classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];

const result = classesInList.filter(({ className }) => classKeys.includes(className));

console.log(result);


0 commentaires