-1
votes

Comment extraire des champs du tableau?

[
   {
    "first": "Jane2",
    "x": 3
  },
  {
    "first": "Jane3",
    "x": 4
  }
]


7 commentaires

Qu'attendez-vous && {"Premier": O.First, "x": O.x} fait? Je m'attends à ce qu'il retourne la valeur véridée de "oui c'est un objet"


Quels sont vos "champs désirés" que vous voulez obtenir?


Je veux mettre si à l'intérieur là-bas, ne pouvait pas obtenir si essayé &&


@NickParsons dans la déclaration de retour


@ Md.Parvezalam Vous souhaitez donc une gamme d'objets qui n'a que vos premières et x clés?


Vous pouvez faire retour o.x> 2 && o.first === "Jane" Mais vous devez probablement nous dire plus - montrer la sortie attendue


Publier mis à jour avec la sortie requise


3 Réponses :


3
votes

Vous pouvez utiliser .ReRuce code> pour former un tableau d'objets où x est supérieur à 2. Ici, j'ai utilisé Destructuration de l'affectation pour obtenir Le premier code> et x code> de l'objet donné, puis utilisé un opérateur ternaire pour vérifier s'il faut ajouter ou non l'objet à la matrice:

p>

const arr = [{first:'Jane',last:'Doe',x:1},{first:'Jane1',last:'Doe1',x:2},{first:'Jane2',last:'Doe2',x:3},{first:'Jane3',last:'Doe4',x:4}],

res = arr.reduce((acc, {first, x}) =>  x > 2 ? [...acc, {first, x}]:acc, []);
console.log(res);


7 commentaires

Très élégant, maintenant je comprends ça - m'a pris une seconde pour obtenir {premier, x}


Je trouve cela moins lisible puis filter + carte. Je suis juste curieux de comprendre pourquoi vous pensez que cela pourrait être une meilleure solution.


Eh bien, s'il y avait 100 objets dans le tableau, et 100 de ces objets avaient un x> 2 , vous serez pratiquement en boucle via la matrice deux fois, où dans cette solution, vous ne feriez que boucler une fois . (Donc, je pense que cela est légèrement plus efficace - en fonction du jeu de données). Mais je ne dis pas que c'est une meilleure solution, c'est juste une autre solution


Une fois que les sous-pièces sont comprises, il est aussi lisible que le filtre / carte qui semble trop travailler.


Oui, je vois maintenant que l'accumulateur est adopté comme premier argument et l'objet destruct avec seulement premier et X comme deuxième - besoin de le grok avec plus d'exemples, mais le vôtre est un bon


Si je le sange, il est plus facile: res = arr.reduce (\ n (ACC, {première, x}) => x> 2? \ N [... ACC, {premier, x}]: \ n acc, \ n []); - c'est une utilisation d'usecase parfaitement adaptée à la réduction


@mplungjan ouais, des exemples sont toujours bons. Je pense que [{A: 1}, {A: 2}, {A: 3}]. Carte (({A}) => a) peut être un exemple plus simple pour envelopper votre tête . Le mien fait une chose la même chose en utilisant un autre argument (ACC dans mon cas). Ouais, la division en plusieurs lignes le rend aussi plus lisible que je suppose: p



1
votes

juste concatez les 2 fonctions

p>

const arr = [
  { first: 'Jane', last: 'Doe', x: 1 },
  { first: 'Jane1', last: 'Doe1', x: 2 },
  { first: 'Jane2', last: 'Doe2', x: 3 },
  { first: 'Jane3', last: 'Doe4', x: 4 }
];          

const result = arr.filter(o => o.x > 2).map(o => ({first: o.first, x: o.x}));

console.log(result);


5 commentaires

Ceci va bien pour concéder la fonction deux, mais ce que j'essaie d'ignorer les faux enregistrements en mettant une condamme à l'intérieur "Laissez Res = obj.map (O => {retour box> 2 && {" Premier ": o. x ": ox}})"


Parce que cela retourne correctement, il s'agit également d'ajouter de faux enregistrements


Qu'est-ce que vous entendez par "Ajout de faux enregistrements"?


Si vous voyez la sortie de mon "Soit res = obj.map (o => {retour o.x> 2 && {" "premier": O.First, "x": o.x}}) "Il est en train de réaliser des enregistrements corrects avec deux faux


Dans ma solution, il n'y a pas de faux . Le premier filtre d'objets indésirables (ceux avec x <= 2) ah puis chantent les objets restants vers un nouvel objet avec uniquement les champs souhaités



0
votes

Vous pouvez utiliser un filtre pour obtenir un nouveau tableau en fonction de vos critères. Ceci est utile car il ne modifie pas votre tableau existant. Vous pouvez ensuite utiliser une carte pour modifier la structure comme indiqué.

p>

const arr = [{
    first: 'Jane',
    last: 'Doe',
    x: 1
  },
  {
    first: 'Jane1',
    last: 'Doe1',
    x: 2
  },
  {
    first: 'Jane2',
    last: 'Doe2',
    x: 3
  },
  {
    first: 'Jane3',
    last: 'Doe4',
    x: 4
  }
],

res = arr.filter(item => item.x > 2).map(({first,x}) => ({first,x}));
console.log(res);


0 commentaires