数组扁平化

扁平化数组:将一个多维数组变为一维数组;

核心思想:遍历数组arr,如果遍历的元素还是数组就递归遍历,直到不为数组,就进行concat。

递归

function flatArray(arr) {
			var result = [];
			for (var i = 0; i < arr.length; i++) {
				if (Array.isArray(arr[i])) {
					result = result.concat(flatArray(arr[i]));
				} else {
					result.push(arr[i]);
				}
			}
			return result;
		}
		var arr = [1, 3, [[5, [2]]], [2, 3, [4, 5]]]
		console.log(flatArray(arr))

ES6 flat

function flatArray(arr) {
			return arr.flat(Infinity);
		}
		var arr = [1, 3, [[5, [2]]], [2, 3, [4, 5]]]
		console.log(flatArray(arr))

flat()默认只拉平一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。PS:flat有兼容问题

迭代器

function* iterArr(arr) {            //迭代器返回一个迭代器对象
  if (Array.isArray(arr)) {         // 内节点
      for(let i=0; i < arr.length; i++) {
          yield* iterArr(arr[i]);   // (*)递归
      }
  } else {                          // 离开
      yield arr;
  }
}
// 使用 for-of 遍历:
var arr = ['a', ['b', 'c'], ['d', 'e']];
for(var x of iterArr(arr)) {
        console.log(x);               // a  b  c  d  e
 }

// 或者直接将迭代器展开:
var arr = [ 'a', ['b',[ 'c', ['d', 'e']]]];
var gen = iterArr(arr);
arr = [...gen];                        // ["a", "b", "c", "d", "e"]

来源


数组扁平化
https://blog.fullsize.cn/2021/04/13/notion/shu-zu-bian-ping-hua/
作者
fullsize
发布于
2021年4月13日
许可协议