2
votes

Filtrer la clé de la liste des objets

Comment puis-je filtrer chaque clé d'une liste d'objets dans ES6? Compte tenu de cet original (il peut y en avoir plusieurs dans cette liste):

displayFrames: function () {
  return this.frames.filter(e => e.key !== 'frame_variables')
}

Je veux renvoyer ceci:

[{"x": 0, 
 "y": 0, 
 "width": 10
}]

Je pense à quelque chose listez ceci mais je ne suis pas sûr de la syntaxe:

[{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}]

Des idées?


3 Réponses :


4
votes

let array = [{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}];

let result = array.map(({ frame_variables, ...rest }) => ({ ...rest }));

console.log(result);

vous devez utiliser fonction de carte pour transformer tous vos éléments de votre tableau. Avec destructuring , vous pouvez séparer frame_variables clé du reste de l'objet, donc vous retournez simplement un nouvel objet sans cette clé.


0 commentaires

2
votes

Le filtrage sert à supprimer des éléments entiers d'un tableau. Vous pouvez simplement parcourir le tableau et appeler delete pour chacun d'eux.

for (var i = 0, len = array.length; i < len; i++) {
    delete array[i].frame_variables;
}


0 commentaires

2
votes

Quelque chose comme ceci devrait le faire:

let data = {
  "x": 0,
  "y": 0,
  "width": 10,
  "frame_variables": [{
    "lookup_type": null,
    "lookup_id": null
  }]
};

const filterAttribute = (obj, keyToFilterOut) => (Object.keys(obj)).reduce((filteredObj, key) => {
  if (keyToFilterOut !== key) {
    filteredObj[key] = obj[key]
  }
  return filteredObj;
}, {});

console.log(filterAttribute(data, 'frame_variables'))

Ma solution ne modifie pas non plus l'objet d'origine, mais choisit d'en créer un tout nouveau - idéal si vous souhaitez conserver les données pour d'autres raisons


0 commentaires