数组扁平化
  • ES6 : flat方法
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = arr.flat(Infinity)        //后面传入的参数是扁平化的级数;Infinity表示扁平化无限级
  • toString
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = arr.toString().split(',').map((item)=>{
  return parseFloat(item)
})

//toString后  "1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10"
//split(',')后  ["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]
//然后再把每一项转化成数字
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

arr = JSON.stringify(arr).replace(/\[|\]/g,'').split(', ').map((item)=>{
  return parseFloat(item)
})
// JSON.stringify(arr)后  "[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]"
  • 循环验证数组
    • 循环验证是否为数组,是的话继续循环,不是的话直接存入
let arr = [
    [1, 2, 2],
    [3, 4, 5, 5],
    [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];

function flatten(arr){
  while(arr.some(item => Array.isArray(item))){
      arr = flatten([].concat(...arr))        //[].concat(...arr)这样操作会展开一层。递归继续扁平化处理
    }
    return arr;
}

some用于检测数组中是否有符合条件的元素,方法会依次执行数组的每个元素

  • 如果有一个满足条件的,则返回true,剩余的元素不会再执行检测
  • 没有满足条件的,返回false

every用于检测数组中的元素是否都符合条件

  • 如果检测的数组中有一个不满足条件,那么返回false,并且剩余的不再检测
  • 如果都满足条件那么返回true
//循环递归,判断当前项是否是数组,如果不是数组那么存进新数组中,如果是数组那么继续校验
(function(){
  function myFlat(){
          let result = [],
                  _this = this;
            let fn = (arr) => {
        for(let i = 0;i<arr.length;i++){
          let item = arr[i]
          if(Array.isArray(item)){        //如果是数组那么自己递归继续展开,不是的话直接push到result中
            fn(item);
            break;
          }
          result.push(item)
        }
            }
            fn(_this)
      return result;
    }
    Array.prototype.myFlat = myFlat;
})()

arr = arr.myFlat();

results matching ""

    No results matching ""