一. 原理

  • 数组扁平化:将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 :::tips
  1. [ 1, [2] ] => [ 1,2 ]
  2. [ [ 1, 2 ], [ 3, 4 ] ] => [ 1, 2, 3, 4 ]
  3. [ 1, 2, [ 3, 4, [ 5, 6 ] ] ] => [ 1, 2, 3, 4, 5, 6 ] :::

    二. 应用


三. 手写代码

  1. function flatter1(arr) {
  2. return arr.flat(Infinity);
  3. }
  1. function flatter2(arr) {
  2. while(arr.some( (el) => (Array.isArray(el)) )){
  3. arr = [].concat(...arr);
  4. }
  5. return arr;
  6. }
  1. function flatter3(arr) {
  2. return arr.reduce((pre, cur) => {
  3. return pre.concat(Array.isArray(cur)?flatter3(cur):cur);
  4. }, []);
  5. }
  1. function flatter4(arr) {
  2. let result = [];
  3. for(let i=0; i<arr.length; i++){
  4. if(Object.prototype.toString.call(arr[i]) == '[object Array]'){
  5. result = result.concat(flatter4(arr[i]));
  6. } else {
  7. result.push(arr[i]);
  8. }
  9. }
  10. return result;
  11. }

四. 测试代码

  1. var arr = [1, [2, 3, [4, [5, [6]]]]];
  2. console.log(flatter1(arr)); // [ 1, 2, 3, 4, 5, 6 ]
  3. console.log(flatter2(arr)); // [ 1, 2, 3, 4, 5, 6 ]
  4. console.log(flatter3(arr)); // [ 1, 2, 3, 4, 5, 6 ]
  5. console.log(flatter4(arr)); // [ 1, 2, 3, 4, 5, 6 ]