2
votes

Renvoie plusieurs tableaux en utilisant la fonction "map"

Mon code a un tableau d'éléments comme suit:

element: { fromX: { id: ... } , toX: { id: ... } }

La condition requise est d'extraire tous les identifiants fromX dans un seul tableau, et tous les toX ids dans d'autres.

Il y a deux manières différentes, comme utiliser foreach , réduire , en itérant respectivement pour chacun, mais je recherche un moyen fonctionnel optimal de renvoyer deux tableaux avec un mappage?

p>


5 commentaires

avez-vous seulement deux propriétés dans un objet?


Pouvez-vous fournir une entrée et une sortie plus complètes? Merci.


Qu'espérez-vous obtenir? Un tableau qui contient deux tableaux avec les valeurs mappées?


Pouvez-vous développer un peu plus l'exemple de code pour afficher la structure complète? Par exemple, à quoi cela ressemble-t-il lorsque plusieurs valeurs fromX et fromY sont affichées?


[froms, tos] = transpose (elements.map (e => [e.fromX, e.toX])) est la manière fonctionnelle - malheureusement il n'y a pas de transpose fonction dans JS


4 Réponses :


2
votes

Vous pouvez prendre un tableau pour les clés voulues et mapper la valeur. Plus tard, prenez une affectation de déstructuration pour obtenir une seule id.

const
    transpose = array => array.reduce((r, a) => a.map((v, i) => [...(r[i] || []), v]), []),
    array = [{ fromX: { id: 1 }, toX: { id: 2 } }, { fromX: { id: 3 }, toX: { id: 4 } }],
    keys = ['fromX', 'toX'],
    [fromX, toX] = transpose(array.map(o => keys.map(k => o[k].id)));

console.log(fromX);
console.log(toX);


3 commentaires

Je crois que votre réponse ne respecte pas une des exigences de la question "Je voudrais tirer tous les identifiants fromX dans un tableau et tous les identifiants toX dans un autre.".


@thibpat, veuillez consulter fromX et toX .


Lors de l'exécution de votre extrait, j'obtiens: fromX = [1,2] et toX = [3,4] . Je crois que le résultat attendu est fromX = [1, 3] et toX = [2, 4] .



0
votes

Essayez ceci:

const arr = [{
  fromX: {
    id: 1
  },
  toX: {
    id: 2
  }
}, {
  fromX: {
    id: 3
  },
  toX: {
    id: 4
  }
}]
let {
  arr1,
  arr2
} = arr.reduce((acc, {
  fromX,
  toX
}) => ({ ...acc,
  arr1: [...acc.arr1, fromX],
  arr2: [...acc.arr2, toX]
}), {
  arr1: [],
  arr2: []
})
console.log(arr1, arr2);


0 commentaires

2
votes

Utilisation de Array # reduction a > et destructuring

p>

const data=[{fromX:{id:1},toX:{id:2}},{fromX:{id:3},toX:{id:4}},{fromX:{id:5},toX:{id:6}},{fromX:{id:7},toX:{id:8}}]

const [fromX,toX] = data.reduce(([a,b], {fromX,toX})=>{
  a.push(fromX.id);
  b.push(toX.id);
  return [a,b];
}, [[],[]]);

console.log(fromX);
console.log(toX);


0 commentaires

0
votes

Vous pouvez y parvenir en utilisant la solution ci-dessous

var array = [{ fromX: { id: 1 }, toX: { id: 2 } }, { fromX: { id: 3 }, toX: { id: 4 } }], 
 arrayX = array.map(x => x.fromX), arraytoX = array.map(toX => toX.toX)

console.log(arrayX);
console.log(arraytoX );


0 commentaires