J'ai un objet javascript hiérarchique dont j'ai besoin pour filtrer certains de ses éléments. Je me demande s'il existe un moyen simple de le faire.
Par exemple, j'ai un objet actions
comme ci-dessous. Je veux filtrer ceux qui ont une propriété default
qui est définie sur true
.
getNonDefaultActions = actions => map(actions, (actionListByType, key) => { actionListByType.filter(action => !(action.defaultFlag === true)) });
Donc finalement je veux pour avoir quelque chose comme:
let filteredActions={ sql: [ { stmt: 'bbb' } ], email: [] }
Voici comment j'essaie de résoudre mon problème, mais il semble que cela ne fonctionne pas.
let actions={ sql: [ { content: 'aaa', default: true }, { stmt: 'bbb' }, { stmt: 'ccc', default: true }], email: [ { content: 'xxx', default: true }] }
Il semble que rien n'ait été filtré. Toute solution est la bienvenue. De plus, si lodash fournit quelque chose de pratique pour ce type de problème, ce serait génial
3 Réponses :
Vous pouvez utiliser la _.mapValue ()
a de lodash > avec _.reject ()
:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
const actions = {"sql":[{"content":"aaa","default":true},{"stmt":"bbb"},{"stmt":"ccc","default":true}],"email":[{"content":"xxx","default":true}]} const result = _.mapValues(actions, arr => _.reject(arr, 'default')) console.log(result)
Object.entries (actions) .forEach (([k, v]) => actions [k] = v.filter (f =>! f.default));
fait l'affaire à la vanille. L'idée est de parcourir des paires d'objets clé-valeur et de réaffecter chaque valeur à une version filtrée d'elle-même.
const actions = {"sql":[{"content":"aaa","default":true},{"stmt":"bbb"},{"stmt":"ccc","default":true}],"email":[{"content":"xxx","default":true}]}; Object.entries(actions).forEach(([k, v]) => actions[k] = v.filter(f => !f.default)); console.log(actions);
Vous pourriez obtenir un nouvel objet avec des propriétés filtrées.
let actions = { sql: [{ content: 'aaa', default: true }, { stmt: 'bbb' }, { stmt: 'ccc', default: true }], email: [{ content: 'xxx', default: true }] }, result = Object.assign( ...Object .entries(actions) .map(([k, v]) => ({ [k]: v.filter(o => o.default !== true) })) ); console.log(result);
Bonne année :)
@OriDrori, bonne année à toi aussi :)