JS配列の偏平化


本当は書きたくないので、考えて書いてみましょう.
配列の平準化とは、多次元配列を1次元配列に変え、JSで配列の平準化を実現する方法には様々な種類があります.多くの話をしないでコードを見てください.
 
方法1、基本的なforサイクル+再帰
var arr = [1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]];
function arrFlat(arr){
  var temp = [];
  for(var i=0; i
方法2、toString()
let arr = [1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]];
console.log(arr.toString())  //"1,2,3,4,5,6,7,9,10,11,12"
arr = arr.toString().split(',').map(item => Number(item))//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
方法3、JSON.strigify()
let arr = [1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]];
JSON.stringify(arr)  //"[1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]]"
JSON.stringify(arr).replace(/(\[|\])/g, '')  //"1,2,3,4,5,6,7,8,9,10,11,12"
arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => Number(item));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
方法4、concat()+…演算子
例えば[].concat(...arr)は、多次元配列を平坦化することができる.
let arr = [1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]];
console.log([].concat(...arr))  //[1, 2, 3, 4, 5, [6, 7, [8, 9]], 10, 11, 12]
while(arr.some(item => Array.isArray(item))){
  arr = [].concat(...arr)
}
console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
方法5、flat()
これはES 6が提供する配列平準化法である.使い方も簡単です.新しい配列を返します.
let arr = [1,2,[3,4,5,[6,7,[8,9]]],10,[11,12]];
arr = arr.flat()  //[1, 2, 3, 4, 5, [6, 7, [8, 9]], 10, 11, 12]
arr = arr.flat(2)  //[1, 2, 3, 4, 5, 6, 7, [8, 9], 10, 11, 12]
arr = arr.flat(Infinity)  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
 
flatのシンプルな実現
flat()の互換性はまだ低いので、もっと低い文法で手動で実現してもいいです.
/**
 * @param {number} n      ,   1
 */
function myFlat(n){
  var temp = [];
  n = (n === 'infinity' || !isNaN(n)) ? n : 1;  //     ,   1
  var m = 0;
  function fn(arr){
    if(n !== 'infinity'){
      // n  ,        
      if(m > n){
        temp.push(arr);
        return m = 1;
      }
      m++;
    }
    
    for(var i=0; i