JS 数组降维/扁平化(减少层级)方法

二维数组降维

1.使用 for 循环降维/扁平化

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

var i, j, val, result = [];

for (i = 0; i < arr.length; i++) {
  val = arr[i];

  if (Array.isArray(val)) {
    for (j = 0; j < val.length; j++) {
      result.push(val[j]);
    }
  } else {
    result.push(val);
  }
}

console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]

2.结合 concat()、 apply() 方法降维/扁平化

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

var result;

result = [].concat.apply([], arr);

console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]

3.结合 concat()方法和 ES6 扩展运算符 (…) 降维/扁平化

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

var result;

result = [].concat(...arr);

console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]

多维数组降维/扁平化

4.数组降维/扁平化函数递归执行:

var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];

function flatArray(arr) {
  if (!Array.isArray(arr)) {
    return arr;
  }

  var i, result = [];

  for (i = 0; i < arr.length; i++) {
    result = result.concat(flatArray(arr[i]));
  }

  return result;
}

console.log(flatArray(arr));

var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];

function flatArray(arr) {
  if (!Array.isArray(arr)) {
    return arr;
  }

  return arr.reduce((result, val)=>{
    return result.concat(flatArray(val));
  }, [])
}

console.log(flatArray(arr));
// > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

5.使用 ECMAScript 2019 flat() 方法降维/扁平化

var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];

console.log(arr.flat(Infinity));
// > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
此条目发表在JavaScript分类目录,贴了, , , , , , , 标签。将固定链接加入收藏夹。