0
votes

Tableaux de filtres JavaScript dans un objet

Disons que j'ai un objet avec la structure xxx

je veux extraire des éléments où key2 == "abc" .

Sortie attendue: xxx

J'ai essayé de suivre similaire Exemples mais omis de mettre en œuvre ce que je voulais.


0 commentaires

5 Réponses :


8
votes

Utilisez Object.entries () code> pour extraire toutes les paires de clé / valeur de data ​​code> comme tableau, Carte sur chaque paire, puis Filtre code> sur chaque valeur pour extraire ceux que vous voulez.

Vous pouvez ensuite rejoindre Sauvegarde objet.fromentre () code> p>

p>

!!values && values[findKey] === findValue


7 commentaires

Mon cerveau fait mal à essayer de suivre tous les destructurants qui y vont.


Bien que cela fonctionne, il y a tellement de destructurations ici que vous pourriez perdre le flux


@MANOSKOUNAKIS Il n'y a que deux destructures ici, une matrice ( [clé, val] ) et un objet ( {valeur} ). Vous ne savez pas trop ce que vous considérez trop?


Avez-vous besoin de la chaîne optionnelle? Je pensais que si vous essayez d'accéder à une propriété au premier calque qui n'est pas là, il retourne non défini?


@Ifaruki C'est là que l'une des entrées de tableau ne dispose pas d'une propriété . S'ils le faisaient, valeurs serait non défini et valeurs [FindCey] lancerait une erreur


À première vue, j'ai vu la valeur de retour du rappel de la flèche à l'intérieur de la carte et pensais que c'était une destructure.


Je sais que je pensais que je pensais que parce qu'ils n'auraient pas dit qu'il pouvait arriver qu'il n'y ait pas de valeurs disponibles.



1
votes

Vous pouvez réduire les propriétés de l'objet à ceux qui passent un filtre

p>

const data = {
    a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}, {values: {key1: 4, key2: "cde"}}],
    b : [{values: {key1: 3, key2: "ffe"}}, {values: {key1: 11, key2: "gga"}}, {values: {key1: 7, key2: "abc"}}]
};

const results = Object.getOwnPropertyNames(data).reduce((results, key) => {
  const filtered = data[key].filter(item => item.values.key2 === 'abc');
  if (filtered && filtered.length) {
    results[key] = filtered;
  }
  return results;
}, {});

console.log(results);


1 commentaires

Pourrait avoir besoin de clarifier avec OP s'ils veulent des résultats vides omis mais c'est une belle addition



1
votes
a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}],
b : [{values: {key1: 7, key2: "abc"}}]

0 commentaires

4
votes

simple pour une boucle de> iTerate sur les clés et Filtres les tableaux et réaffectaient les propriétés directement.
Mutate les données directement.

utilise filtre et Destructures Key2 à filtrer sur elle. p>

p>

const data = {
    a : [{values: {key1: 5, key2: "abc"}}, {values: {key1: 3, key2: "abc"}}, {values: {key1: 4, key2: "cde"}}],
    b : [{values: {key1: 3, key2: "ffe"}}, {values: {key1: 11, key2: "gga"}}, {values: {key1: 7, key2: "abc"}}]
}

for(const k of Object.keys(data))
  (data[k] = data[k].filter(({values:{key2}={}})=>key2==='abc'))
    .length || delete data[k]
  
console.log(data)


0 commentaires

0
votes

Comme vous avez besoin de itérer sur vos attributs d'objets, je vous suggère de les extraire avec objet.keys (objet) que vous pouvez trouver ici:

https://developer.mozilla.org/es/docs/web/javascript/referencia/objetos_globales / Objet / Keys

Je vous suggère de faire itérer comme ceci: xxx

bonne chance.


0 commentaires