J'ai besoin de remplir un tableau d'identifiants avec des objets. En d'autres termes, je l'ai. Tableau d'identifiants:
var orderArray = ["5ace454a2b22e17597d0e694", "5acde7c0f7d2520e3b205971", "5ad2086bf05ad342dc723ea1"]
Et tableau d'objets:
var objectsArray = [ { _id: 5acde7c0f7d2520e3b205971,
name: 'Dinner',
restaurant: 5a68d8ea17d9e4308e6400c3,
created: 2018-04-11T10:47:28.957Z,
status: true,
products: [ [Object] ] },
{ _id: 5ace454a2b22e17597d0e694,
name: 'Test',
restaurant: 5a68d8ea17d9e4308e6400c3,
image:
{ _id: 5ad23ed177bcd07303f62899,
filename: 'rJKCR2k2f-1523728081111.jpeg',
destination: 'images',
binded: true },
created: 2018-04-11T17:26:34.186Z,
status: false,
products: [ [Object], [Object] ] },
{ _id: 5ad2086bf05ad342dc723ea1,
name: 'Test',
restaurant: 5a68d8ea17d9e4308e6400c3,
image: null,
created: 2018-04-14T13:55:55.449Z,
status: true,
products: [] } ]
Soit vous pouvez trier un tableau d'objets en fonction des identifiants ... Ou mapper un tableau d'identifiants sur un tableau d'objets. Je préférerais probablement la deuxième option. Mais mon approche ne fonctionne tout simplement pas
orderArray.map(id => objectsArray.filter(obj => obj._id == id))
Le résultat doit être : objectsArray est trié par ordre d'éléments dans orderArray
SOLUTION: j'ai ouvert cette question il y a quelques jours: Fusion de 2 tableaux avec différents types de valeurs
Ici, j'ai le même problème. orderArray est un tableau d'objets (pas une chaîne) donc pour le faire fonctionner, j'ai besoin d'appliquer la solution que j'ai trouvée plus tôt (les fonctions Array.filter et Array.find fonctionnent bien): mais à ma façon, cela ne fonctionnera que si:
order_array.map(String).map(e => objectsArray.find(a => a._id == e))
//as well as
order_array.map(String).map(e => objectsArray.filter(a => a._id == e))
3 réponses
map
le premier tableau à le remplir avec les éléments correspondants du second:
var orderArray = ["5ace454a2b22e17597d0e694", "5acde7c0f7d2520e3b205971", "5ad2086bf05ad342dc723ea1"]
var objectsArray = [ { _id: '5acde7c0f7d2520e3b205971',
name: 'Dinner',
restaurant: '5a68d8ea17d9e4308e6400c3',
created: '2018-04-11T10:47:28.957Z',
status: true,
products: [ [Object] ] },
{ _id: '5ace454a2b22e17597d0e694',
name: 'Test',
restaurant: '5a68d8ea17d9e4308e6400c3',
image:
{ _id: '5ad23ed177bcd07303f62899',
filename: 'rJKCR2k2f-1523728081111.jpeg',
destination: 'images',
binded: true },
created: '2018-04-11T17:26:34.186Z',
status: false,
products: [ [Object], [Object] ] },
{ _id: '5ad2086bf05ad342dc723ea1',
name: 'Test',
restaurant: '5a68d8ea17d9e4308e6400c3',
image: null,
created: '2018-04-14T13:55:55.449Z',
status: true,
products: [] } ]
var sorted = orderArray.map((e) => { return objectsArray.find((a) => { return a._id == e})})
console.log(sorted)
En utilisant map
/ find
(au lieu de filter
):
let mappedArray = orderArray.map(id => objectsArray.find(obj => obj._id == id));
Qui map
est orderArray
à un tableau d'objets, où il find
est l'objet de objectsArray
qui a le même _id
que l'actuel {{X5} }.
Remarque: s'il n'y a pas d'objet dans objectsArray
qui correspond à id
, null
sera retourné.
Tu devrais être capable de:
ObjectsArray.filter (obj => OrdersArray.includes (obj._id));
Si je comprends bien.
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.