js数组扁平化

js二维数组展平

//将 arr=[1,[2],[3,4],[4,[5,6]]] 展平

let arr = [1, [2], [3, 4], [4, [5, 6]], 7];

// 方法一  遍历

function flattenMd(arr) {
  let res = [];
  function flatten(arr) {
    for (let i = 0; i < arr.length; i++) {
      if (Array.isArray(arr[i])) {
        flatten(arr[i]);
      } else {
        res.push(arr[[i]]);
      }
    }
  }
  flatten(arr);
  return res;
}

console.log(flattenMd(arr));

//方法二 concat 只能展开一维

// function flattenArr(arr) {
//   let r = [];
//   for (let i = 0; i < arr.length; i++) {
//     r = r.concat(arr[i]);
//   }
//   return r;
// }
// console.log(flattenArr(arr));

// function flatten2d(arr) {
//   return Array.prototype.concat.apply([], arr);
//   // return [].concat.apply([],arr);
// }
// console.log(flatten2d(arr));

//方法三 concat 迭代
function flattenMd(arr) {
  var result = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] instanceof Array) {
      result = result.concat(flattenMd(arr[i]));
    } else {
      result.push(arr[i]);
    }
  }
  return result;
}
console.log(flattenMd(arr));

//方法四 递归

function flatten(arr) {
  return arr.reduce(function (plane, toBeFlatten) {
    return plane.concat(
      Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten
    );
  }, []);
}
console.log(flatten(arr));

// 递归的简化版

flatten1 = function (arr) {
  return arr.reduce(
    (plane, toBeFlatten) =>
      plane.concat(
        Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten
      ),
    []
  );
};

console.log(flatten1(arr));
// 简化

flatten2 = (arr) =>
  arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);

console.log(flatten2(arr));

// 方法五:利用ES6的展开符

// function flatten3(arr) {
//   return [].concat(...arr);
// }

// console.log(flatten3(arr));//只降低一维

// 递归+...
function deepFlatten(arr) {
  flatten = (arr) => [].concat(...arr);
  return flatten(arr.map((x) => (Array.isArray(x) ? deepFlatten(x) : x)));
}

console.log(deepFlatten(arr));

// 方法六 join和split

function flattenMdd(arr) {
  return arr.join().split(",");
}
console.log(flattenMdd(arr));
posted @ 2021-04-12 22:53  AUSER  阅读(102)  评论(0)    收藏  举报