Supposons que j'ai ce type de tableau:
Ce que je dois faire est d'obtenir éléments imbriqués sur la couche supérieure, à ressembler à: p> J'essaie d'atteindre ça dans manière fonctionnelle, le code ressemble donc à ceci: p> mais qui figure avec [[[1, 2], [3, 4]] code> p>
[1, 2, 3, 4] code> p>
jeton inattendu ... code> erreur. Alors, quelle est la façon de le faire correctement? P> p>
3 Réponses :
Vous pouvez utiliser la méthode p> plate code> de tableau:
const inp = [[1,2], [3,4]];
console.log(inp.reduce((acc, val) => acc.concat(...val), []));
Il convient probablement de mentionner que cela ne fonctionne pas (actuellement) sur Edge, Internet Explorer ou Nœud.
@PatrickRoberts Quelle version utilisez-vous? ça marche depuis chrome 69
@PatrickRoberts Vous pouvez vérifier la compatibilité du navigateur ici: développeur.mozilla.org/en-us/docs/web/javascript/reference/...
Chrome prend également en charge platmap code>
Oh, j'ai eu un drapeau, c'était mon mauvais.
p> array.from code> produira un élément pour chaque élément de la matrice passée. Il regarde la longueur
code> de la transmission intimer et iterate sur les index à partir de 0. Donc, peu importe ce que vous faites dans le rappel (en supposant que ce soit valide), vous allez obtenir un tableau de la longueur 2 sortie si vous passez dans une matrice à deux éléments.
Réduire () code> est probablement une meilleure option ici: p>
let arr = [ [1, 2], [3, 4] ]
let flat = arr.reduce((arr, item) => [...arr, ...item])
console.log(flat)
Vous pouvez créer un itérateur pour le tableau et propager la matrice en utilisant un autre générateur pour des tableaux imbriqués.
p>
function* flat() { for (var item of this.slice()) { if (Array.isArray(item)) { item[Symbol.iterator] = flat; yield* item } else { yield item; } } } var array = [[1, 2], [3, 4, [5, 6]]]; array[Symbol.iterator] = flat; console.log([...array]);
C'est plutôt cool. Il pourrait être plus agréable si plat () code> a pris le tableau en tant que paramètre et appelé récursivement afin d'éviter l'effet secondaire de la modification des sous-réseaux. Mais alors vous devriez appeler
[... plat (tableau)] code>
Il y a
array.pototype.flat < / code>
. Regardez son Polyfills .Les éléments imbriqués seront-ils toujours des matrices?
Votre confusion découle du fait que la syntaxe de diffusion n'est pas un opérateur. C'est une syntaxe contextuelle.
@Xufox merci pour ça!
Appartement code> Cela me semble très bien.