Array.prototype.flat()

Il metodo flat() crea un nuovo array con tutti gli elementi dei propri sotto-array concatenati ricorsivamente al suo interno fino alla profondità specificata.

Sintassi

var newArray = arr.flat([profondità]);

Parametri

profondità Optional
Il livello di profondità che specifica quanto a fondo la struttura di array annidati deve essere appianata. Default a 1.

Valore di ritorno

Un nuovo array con gli elementi dei sotto-array concatenati al suo interno.

Esempi

Appianare array annidati

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

Appianamento e slot vuoti negli array

Il metodo flat rimuove gli slot vuoti in un array:

var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]

Alternative

reduce e concat

var arr1 = [1, 2, [3, 4]];
arr1.flat();

//appianare array di un livello
arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4]

//o
const flatSingle = arr => [].concat(...arr);
//abilitare appianamento a una certà profondità usando reduce e concat
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];

function flattenDeep(arr1) {
   return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}
flattenDeep(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
//appianamento profondo non ricorsivo usando uno stack
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatten(input) {
  const stack = [...input];
  const res = [];
  while (stack.length) {
    // rimozione valore dallo stack
    const next = stack.pop();
    if (Array.isArray(next)) {
      // reinserimento degli elementi degli array, non modifica l'input originale
      stack.push(...next);
    } else {
      res.push(next);
    }
  }
  //reverse per ripristinare l'ordine originario
  return res.reverse();
}
flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
//appianamento profondo ricorsivo
function flatten(array) {
  var flattend = [];
  !(function flat(array) {
    array.forEach(function(el) {
      if (Array.isArray(el)) flat(el);
      else flattend.push(el);
    });
  })(array);
  return flattend;
}

Specificazioni

Specificazione Stato Commenti

Array.prototype.flat proposal

Finished (4)

Compatibilità con i browser

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
flatChrome Full support 69Edge No support NoFirefox Full support 62IE No support NoOpera Full support 56Safari Full support 12WebView Android Full support 69Chrome Android Full support 69Firefox Android Full support 62Opera Android Full support 48Safari iOS Full support 12Samsung Internet Android No support Nonodejs Full support 11.0.0

Legend

Full support  
Full support
No support  
No support

Vedi anche