JS数组的扁平化

147 阅读1分钟

什么是数组的扁平化?

第一次听说扁平化这个词,觉得特别高大上。百度了一下子,就是把复杂的东西拆成一些简单的单元,那么数组的扁平化就是把复杂的嵌套多层的数组给拆成一层或者简单的数组,我的理解大概就是这样。

如何实现数组的扁平化?

  • 简便方法(flatten)
var arr = [1,[[2,3],4,5]];
console.log(flatten(arr));
//output: [1,2,3,4,5]

这是简单的实现数组扁平化的方法,只用一个方法flatten就可以实现数组的扁平化。

  • 递归实现 递归就是程序自己调用自己。
const flatten = (arr) => {
  let result = [];
  arr.forEach((item, i, arr) => {
    if (Array.isArray(item)) {
    //判断arr是不是数组,是就把数组连接,不是就添加进去
      result = result.concat(flatten(item));
    } else {
      result.push(arr[i])
    }
  })
  return result;
};

const arr = [1,[[2,3],4,5]];
console.log(flatten(arr));
//output: [1,2,3,4,5]

  • toString()方法 toString实现扁平化,就是把数组的各项给分开成字符串,然后再遍历进原来的数组。
//先变成字符串
[1,[[2,3],4,5]].toString()
// "1,2,3,4,5"
//然后拆开,再进行遍历
const flatten = (arr) => arr.toString().split(',').map((item) => +item);

const arr = [1,[[2,3],4,5]];
console.log(flatten(arr));
//output: [1,2,3,4,5]

  • reduce方法 reduce本身就是一个迭代器,平常用于累加

  • reduce的使用(累加求和)

var arr = [1, 2, 3, 4, 5];
var sum = arr.reduce(function(pre, cur, index, arr) {
    console.log(pre, cur, index);
    return pre + cur;
})
console.log(arr, sum);

function flatten(arr){
  return arr.reduce(function(pre, cur){
    return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
  }, [])
}

const arr = [1,[[2,3],4,5]];
console.log(flatten(arr));
//output: [1,2,3,4,5]