J'utilise dans mes réducteurs Map / Tableau associatif pour stocker l'objet via un identifiant de chaîne.
Quand j'ai besoin d'un nouvel élément dans la carte, j'utilise cette construction
const contentIds = ['id1','id2','id3'] // something like ??? const {...[ids], ...rows}
Lorsque j'ai besoin de supprimer une carte de formulaire d'élément par identifiant, j'utilise ceci.
const { [rowId]: deleted, ...rows } = state.rows;
Dans les lignes variables, j'ai une carte et une propriété avec le nom rowId
est manquante.
Je me demande comment puis-je faire cela si j'ai plusieurs identifiants dans le tableau et que j'ai besoin de tous les supprimer via l'opérateur ...
et la déstructuration.
rows: { ...state.rows, [row.id]: row }
Oui, je peux écrire lamda pour cela ou utiliser omit lodash. Mais juste intéressant si c'est possible.
Merci beaucoup
3 Réponses :
Vous pouvez réduire les clés avec l'objet.
var object = { id: 1, id1: 2, id2: 3 }, contentIds = ['id1', 'id2', 'id3'], result = contentIds.reduce((o, k) => ({ [k]: _, ...r } = o, r), object); console.log(result);
Salut ... comme votre solution ... je sais comment le faire ... Je me demandais simplement s'il est possible de le faire via une simple propagation et une déstructuration aussi élégante que la suppression d'un identifiant
la réponse est que vous ne pouvez pas diffuser les clés pour obtenir un devoir. réellement.
function filterObjectByKeys (object, keysToFilter) { return Object.keys(object).reduce((accum, key) => { if (!keysToFilter.includes(key)) { return { ...accum, [key]: object[key] } } else { return accum } }, {}) }
Je me demande comment puis-je faire cela si j'ai plusieurs identifiants dans le tableau et que je besoin de tous les supprimer via l'opérateur
...
et la déstructuration.Non, vous ne pouvez pas faire cela, vous êtes probablement confondu avec la syntaxe
reste
etspread
,...
sur la gauche Le côté de l'affectation est la syntaxereste
et nonspread
Et la syntaxe
reste
attend... suivi du nom de la variable, ce que vous essayez est syntaxError
const object = { id: 1, id1: 2, id2: 3 }; const contentIds = ['id1', 'id2', 'id3']; const objCopy = object contentIds.forEach(key=>{ delete objCopy[key] }) console.log(objCopy);De plus, vous ne pouvez pas utiliser
,
la virgule aprèsreste
donc même si vous le faitesconst object = {a:1,b:2,c:3} const {...a, ...rows} = object console.log(rows)il est toujours invalide
let {...a, ...rows } = objVous pouvez utiliser la solution suggérée par @nina ou vous pouvez créer une copie de l'objet et parcourir
contentIds
et supprimer la clé / valeur de copyObj pour obtenir la valeur souhaitée
const object = {a:1,b:2,c:3} const a = ['a','b'] const {...[a], ...rows} = object console.log(rows)