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.
5 Réponses :
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);
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);
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);
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);
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);
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.)