4 votes

Comment obtenir un tableau des valeurs de toutes les propriétés des objets à l'intérieur d'un tableau d'objets ?

Je veux obtenir un tableau des valeurs de chaque objet que je possède.

J'ai ça :

const numDataPoints = [
    {
      x0: {x: 807, y: 625},
      x1: {x: 15, y: 20},
      x2: {x: 5, y: 20}
    },
    {
      x0: {x: 11, y: 6},
      x1: {x: 16, y: 21},
      x2: {x: 7, y: 22}
    }
  ];

Je veux ça :

[
  [807, 625],
  [15, 20],
  [5, 20],
  [11, 6],
  [16, 21],
  [7, 22]
]

J'ai essayé ça :

numDataPoints.map((array) => array.map(axis => [axis.x, axis.y]));

mais cette erreur s'est produite :

Uncaught TypeError : array.map n'est pas une fonction

0voto

Vivick Points 1221

C'est parce que ce que vous obtenez est un objet, pas un tableau. Vous pouvez cependant essayer (Es6) :

numDataPoints
.map(_ => {
  return Object.values(_)
  .map(({x, y}) => [x, y]);
}).reduce((acc, elem) => [...acc, ...elem], []);

0voto

Alyson Maia Points 456

Le problème est que array est un objet, vous devez donc mettre en correspondance les clés avant d'utiliser un autre fichier forEach .

const numDataPoints =  [{ x0: {x: 807, y: 625}, x1: {x: 15, y: 20},x2: {x: 5, y: 20} }, { x0: {x: 11, y: 6}, x1: {x: 16, y: 21}, x2: {x:7, y: 22} }];
var foo = []
numDataPoints.forEach((points) => 
    Object.keys(points).forEach(point => 
        foo.push( [points[point].x, points[point].y] )
    )
);
console.log(foo)

0voto

wiesion Points 549

Voici quelques façons différentes d'obtenir deux résultats différents (structure originale d'imbrication ou structure plate) - remarquez également le tri qui pourrait être un cas d'utilisation pour vous - les clés du dictionnaire sont triées de la façon dont elles sont déclarées (pas alphanumériquement) :

const numDataPoints =  [{ x0: {x: 807, y: 625}, x1: {x: 15, y: 20},
x2: {x: 5, y: 20} }, { x0: {x: 11, y: 6}, x1: {x: 16, y: 21}, x2: {x:7, y: 22} }];

// In case you need them sorted and in the original nesting:
console.log(
  numDataPoints
    .map(d => Object.keys(d).sort().map(k => [d[k].x, d[k].y]))
);

// In case you need them sorted and flattened:
console.log(
  numDataPoints
    .map(d => Object.keys(d).sort().map(k => [d[k].x, d[k].y]))
    .reduce((a,v) => { v.forEach(value => a.push(value)); return a; }, [])
);

// In case you don't need them sorted and in the original nesting:
console.log(
  numDataPoints
    .map(d => Object.keys(d).map(k => [d[k].x, d[k].y]))
);

// In case you don't need them sorted and flattened:
console.log(
  numDataPoints
    .map(d => Object.keys(d).map(k => [d[k].x, d[k].y]))
    .reduce((a,v) => { v.forEach(value => a.push(value)); return a; }, [])
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X