js实现数组扁平化

2018-09-15  本文已影响0人  lwz4070

js实现数组扁平化

数组的扁平化,就是将一个嵌套多层的数组array(嵌套可以是任何层数)转换为只有一层的额数组。
如:
var arr = [3,5,[7,3,[22,11],6],4];
//扁平化后:[3, 5, 7, 3, 22, 11, 6, 4]

  var arr = [3,5,[7,3,[22,11],6],4];
        //法一 递归
        function flatten1(arr) {
            var newArr = [];
            for(var i = 0; i < arr.length; i++) {
               //if(Array.isArray(arr[i])) { 或
                if(typeof arr[i] == 'object') {
                 newArr =  newArr.concat(arguments.callee(arr[i]));
                 //或 newArr = newArr.concat(flatten1(arr[i]));
               } else {
                  newArr.push(arr[i]);
               }
            }
            return newArr;
        }
        console.log(flatten1(arr));// [3, 5, 7, 3, 22, 11, 6, 4]
 //法二  reduce方法
       function flatten2(arr) {
          return arr.reduce(function(prev, item) {
            return prev.concat(typeof item == 'object' ? flatten2(item) : item);
          }, []);
       }
      console.log(flatten2(arr));
//法三 toString方法
      //如果数组的元素都是数字,那么我们可以考虑使用 toString 方法 
      function flatten3(arr) {
        return arr.toString().split(',').map(function(item) { //toString之后再split转成数组,并将其转换回数字:
           return +item; //将字符串转为数字
        })
      }
      console.log(flatten3(arr));
 //法四 ES6扩展运算符
      function flatten4(arr) {
        while(arr.some(item =>Array.isArray(item))){
            arr = [].concat(...arr);
        }
        return arr;
      }
      flatten4(arr);
var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]
上一篇 下一篇

猜你喜欢

热点阅读