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>
4 Réponses :
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);
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]
.
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);
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);
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 );
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
etfromY
sont affichées?[froms, tos] = transpose (elements.map (e => [e.fromX, e.toX]))
est la manière fonctionnelle - malheureusement il n'y a pas detranspose code natif > fonction dans JS