3
votes

Fusion de plusieurs tableaux dans un tableau d'objets en un seul tableau

J'ai un objet où les données sont un tableau d'objets, à l'intérieur de l'objet de données j'ai une propriété users qui est un tableau.

Je dois rassembler tous les utilisateurs dans un seul tableau. J'ai écrit en utilisant map et concat .

Est-il possible que je puisse avoir une meilleure solution, ou est-ce correct?

Voir l'extrait ci-dessous.

var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}

var users = response.data.map(o => o.users)

const usersCollection = [].concat(...users)

console.log(usersCollection)


0 commentaires

5 Réponses :


9
votes

Vous pouvez utiliser Array .prototype.flat () :

La méthode flat () crée un nouveau tableau avec tous les éléments du sous-tableau concaténés dans celui-ci de manière récursive jusqu'à la profondeur spécifiée.

/ p>

profondeur | Facultatif

Le niveau de profondeur spécifiant la profondeur à laquelle une structure de tableau imbriqué doit être aplatie. La valeur par défaut est 1.

var users = response.data.flatMap(o => o.users);

Vous pouvez également essayer avec Array.prototype.flatMap () qui est identique à une carte suivie d'un appel à flat code> de profondeur 1 .

var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}

var users = response.data.map(o => o.users).flat();

console.log(users);


1 commentaires

cette méthode plate est-elle prise en charge dans la version nodejs plus de 10?



0
votes

Si vous utilisez ES6, utilisez la puissance de spread avec Array.reduce

var response = {
  data: [{
    users: [1, 2, 3]
  }, {
    users: [4, 5, 6]
  }]
}

var users = response.data.reduce((accumulator, obj) => [...accumulator, ...obj.users], []);

console.log(users);


0 commentaires

0
votes

En utilisant l ' opérateur Spread ES6 , vous pouvez faire le travail rapidement.

var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}

let wantedArray = [];
for(let v of response.data){
  wantedArray.push(...v.users);
}

console.clear();
console.log(wantedArray);


0 commentaires


0
votes

2 commentaires

Veuillez ne pas publier de réponses en double. Cette solution exacte a déjà été fournie.


FYI - La grande majorité des organismes faisant autorité de la communauté JS recommandent des conventions de dénomination dans lesquelles des variables majuscules sont utilisées spécifiquement pour définir constantes ... Google , Mozilla , Airbnb , W3 .