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)
5 Réponses :
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);
cette méthode plate est-elle prise en charge dans la version nodejs plus de 10?
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);
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);
response.data.flatMap(({users})=>users)
Vous devez cependant faire attention à l'assistance du fournisseur si vous utilisez le navigateur.
Vous pouvez utiliser l ' opérateur de diffusion a > var response = {data: [{users: [1,2,3]}, {users: [4,5,6]}]}
var NEWARRAY = [];
for(var v of response.data){
NEWARRAY.push(...v.users);
}
console.log(NEWARRAY);
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 .