J'ai ce tableau de tableaux: [['RF1', 'FF1'], ['FF1'], ['FF1']]
J'essaie de déstructurer et de réduire jusqu'à des valeurs uniques ['FF1', 'RF1']
(l'ordre n'a pas d'importance).
J'ai essayé quelque chose que j'ai trouvé ici , avec la fonction suivante.
jointArray [ [ 'RF1', ' FF1' ], [ 'FF1' ], [ 'FF1' ] ] unique [ [ 'RF1', ' FF1' ], [ 'FF1' ], [ 'FF1' ] ]
et il renvoie exactement ce que je mets, que me manque-t-il ici?
const merge = (...arrays) => { let jointArray = []; arrays.forEach(arr => { jointArray = [...jointArray, ...arr]; }); console.log('jointArray', jointArray); const unique = jointArray.filter((item, index) => jointArray.indexOf(item) === index); console.log('unique', unique); return unique; } let arr = [ [ 'RF1', ' FF1' ], [ 'FF1' ], [ 'FF1' ] ]; merge(arr);
3 Réponses :
Vous pouvez flat array et ensuite utiliser set
let arr = [ ['RF1', ' FF1'], ['FF1'], ['FF1'] ] let flaten = arr.flat().map(a => a.trim()) let newSet = new Set(flaten) console.log([...newSet])
Si vous voulez traiter les espaces de début et de fin de manière insignifiante, vous pouvez boucler et découper après aplatissement du tableau
let arr = [ ['RF1', ' FF1'], ['FF1'], ['FF1'] ] let flaten = arr.flat() let newSet = new Set(flaten) console.log([...newSet])
J'exécute le nœud v10.15.3, je continue juste à obtenir .flat n'est pas une fonction
quoi que ce soit de plus que je puisse faire?
@shaun si cette version ne prend pas en charge flat
, vous pouvez utiliser des alternatives Fusionner / aplatir un tableau de tableaux
var arr = [ [ 'RF1', ' FF1' ], [ 'FF1' ], [ 'FF1' ] ] var myArray = arr.flat(Infinity);; var uniq = [...new Set(myArray)];
Vous pouvez parcourir tous les éléments et les ajouter à un Définissez , puis convertissez-le en tableau en utilisant Array.from () .
var data = [ [ 'RF1', ' FF1' ], [ 'FF1' ], [ 'FF1' ] ]; var unique = new Set(); data.forEach(arr => { arr.forEach(value => { unique.add(value.trim()); }); }); var result = Array.from(unique); console.log(result);
en gros, c'est
new Set (a.flat ())
en javascript moderne@georg: oui, peut-être enveloppé dans
[...]
. Mais seulement parce que les valeurs sont primitives. Si vous avez besoin d'une égalité de valeur pour un non-primitif, leSet
ne vous aidera pas.@ScottSauyet qu'en est-il de cette question qui vous suggère que les non-primitifs sont impliqués ...?
@PatrickRoberts: Rien de particulier, mais lorsque certaines personnes posent une question, elles simplifient souvent les données. Ils ont peut-être pris leur utilisateur ou d'autres objets et en ont fait des chaînes pour qu'il soit plus facile de demander brièvement. Ceci est encouragé, en fait. Ensuite, ils devraient revenir pour demander pourquoi cela ne fonctionne toujours pas avec les données pertinentes. Ce n'est peut-être pas du tout le cas ici, mais j'ai vu plusieurs conversations de ce type impliquant des instances
Set
etMap
.@shaun: D'autres vous proposent de très bonnes alternatives. Mais la raison pour laquelle cela ne fonctionne pas pour vous, c'est parce que cette version de
merge
prend des arguments séparés plutôt qu'un tableau d'entre eux. Si vous supprimez...
du paramètre, cela devrait simplement fonctionner:const merge = (... arrays) => {...}
=>const merge = (tableaux) => {...}
.Consultez ma réponse qui n'utilise pas
flat ()
: stackoverflow.com/a/57896833/2924577 < / a>.Si vous pensez qu'une des réponses a répondu à votre question, pensez à la marquer comme acceptée pour le bénéfice des futurs lecteurs. Plus d'informations: stackoverflow.com/help/someone-answers .