开启辅助访问
帐号登录 |立即注册

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;
  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));
  }
  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]


回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。