Existe-t-il une méthode lodash que je peux utiliser pour la correspondance de modèles en javascript pour le problème suivant?
J'ai les clés = [x, y, z]
et object = {x: 'a', x0: 'a0', y: 'b', y0: 'b1 ', y1:' c ', k:' k ', k1:' k1 '..}
Je dois obtenir le résultat sous la forme {x: 'a', x0: 'a0', y: 'b', y0: 'b1', y1: 'c'}
. < / p>
Fondamentalement, je dois donner un tableau de clés et un objet, et il devrait renvoyer un objet avec toutes les clés qui ont l'une des clés choisies comme sous-chaîne.
4 Réponses :
Je ne connais aucune méthode lodash qui fasse cela, mais ce n'est pas si compliqué:
const keys = ['x', 'y', 'z']; const obj = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c' }; const matched = keys.reduce((acc, key) => { Object.entries(obj) .filter(([k]) => k.includes(key)) .forEach(([k, v]) => (acc[k] = v)); return acc; }, {});
Je ne suis pas sûr de lodash
, mais vous pouvez le faire en utilisant JavaScript natif assez simplement:
const keys = [ 'x', 'y', 'z']; const object = { x: 'a', x0: 'a0', y: 'b', y0:'b1', y1:'c', k:'k', k1:'k1'}; const validEntries = Object.entries(object) .filter(([key, val]) => keys.some(k => key.includes(k))); const result = Object.fromEntries(validEntries); console.log(result);
Vous pouvez parcourir les clés de l'objet et vérifier le tableau des clés
const keys = ['x', 'y', 'z'] const object = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c', k:'k' ,k1:'k1'} // result as = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c'} const result = Object.keys(object).reduce((acc, rec) => { // if current key has sub-string for any value in keys array if(keys.filter(it => rec.indexOf(it) > -1).length > 0) { return {...acc, [rec]: object[rec]} } return acc }, {}) console.log(result)
Vous pouvez utiliser pickBy
mais avec un prédicat personnalisé
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
const keyIncludes = (partialKeys) => (value, key) => partialKeys.some(partialKey => key.includes(partialKey)); const keys = [ 'x', 'y', 'z']; const object = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c', k:'k' ,k1:'k1'}; const filtered = _.pickBy(object, keyIncludes(keys)); console.log(filtered);
Et si vous voulez réutiliser ceci pour différentes clés, vous pouvez créer une fonction "prédicat" pour réutiliser les données
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
const keys = [ 'x', 'y', 'z']; const object = { x: 'a', x0: 'a0', y: 'b' ,y0:'b1', y1:'c', k:'k' ,k1:'k1'}; const filtered = _.pickBy(object, (value,key)=>keys.some(k=>key.includes(k))); console.log(filtered);