J'ai une liste de nombres au format suivant:
<!DOCTYPE html> <html> <head> <title>Expected - [1,2,3,4,5,6,7,8,9,10]</title> </head> <body> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(document).ready(function() { // Expected - [1,2,3,4,5,6,7,8,9,10]; var array_of_arrays = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]; console.log(array_of_arrays); // Section 1 - code does what I expect. I would like something like Section 2. var array_of_values = []; array_of_arrays.map((x) => { x.map((y) => { if (array_of_values.indexOf(y) == -1) array_of_values.push(y) }) }); console.log(array_of_values); // Section 2 - This code does not do what I expect. var resp = array_of_arrays.map(x => x.map(y => y)); console.log(resp); }); </script> </body> </html>
Je m'attends à obtenir la prochaine sortie:
[1,2,3,4,5]
Voici un exemple de mon approche actuelle:
[[1,2],[3,4],[5,1]]
6 Réponses :
Vous pouvez utiliser flatMap
pour cela. Il aplatit (désemboîte) le tableau en fonction de la fonction de rappel fournie. En utilisant un filtre, filtrez les doublons et triez-les à l'aide de sort ()
var a=[[1,2],[3,4],[5,1]].flatMap((x)=>x); var arr=[]; console.log(a.filter((e)=>arr.indexOf(e)==-1?arr.push(e):false).sort());
Il a dit qu'il n'attend que [1,2,3,4,5], vraisemblablement parce que les doublons n'apparaissent qu'une seule fois
Vous pouvez l'utiliser en utilisant ceci en utilisant Array.prototype.reduce () et en utilisant Set
let arr = [[1,2],[3,4],[5,1]] //flatting array arr = arr.reduce((ac,item) => ([...ac,...item]),[]) //remove dupliactes arr = [...new Set(arr)]; console.log(arr);
Une approche à cela peut être réalisée en utilisant réduire () avec un set comme Une autre approche consiste à utiliser le nouveau flat () : accumulateur
:.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
let input = [[1,2],[3,4],[5,1]];
let res = new Set(input.flat());
console.log(Array.from(res));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
let input = [[1,2],[3,4],[5,1]];
let res = input.reduce((acc, a) =>
{
a.forEach(x => acc.add(x));
return acc;
}, new Set());
console.log(Array.from(res));
Vous pouvez créer un filtre distinct
et utiliser flatMap
const distinct = (value, index, self) => { return self.indexOf(value) == index; } console.log( [[1,2],[3,4],[5,6],[7,8],[9,10],[1,2],[3,4],[5,6],[7,8],[9,10]] .flatMap(x => x) .filter(distinct) );
Est-ce ce que vous vouliez.
Lisez le commentaire
var array_of_arrays = [[1, 2],[3, 4], [5, 6], [7, 8], [9, 10], [1, 2],[3, 4], [5, 6], [7, 8], [9, 10]]; // flat the array and then select distinct after that sort the array out var arr = array_of_arrays.flatMap((x)=>x).filter((x, i, a) => a.indexOf(x) == i).sort((a,b)=> a-b) console.log(arr)
vous pouvez utiliser réduire et transmettre l'objet Set comme valeur initiale, Set pour des valeurs uniques.
var list = [[1,2],[3,4],[5,1]]; var arr = list.reduce((acc, c)=>{ c.map((a)=>{ acc.add(a) }); return acc; }, new Set());