数组扁平化

2018-10-24   |     |     |  

经常我们会有需求需要对多维数组做扁平化,例如:

[1,[2,3], [4,5], [6,7]] => [1,2,3,4,5,6,7]

整理了一下数组扁平化的相关处理方案:

二维转一维

如果只是一个二维数组转一维,可以用扩展运算符...

[].concat(...[1,[2,3], [4,5], [6,7]])
[1,2,3,4,5,6,7]

多维转一维

递归map

const flatenArray = (arr) => {
  if(Array.isArray(arr)) {
    return [].concat(...arr.map(item => flatenArray(item)))
  }
  return arr;
}

递归reduce

const flatenArray = (arr) => {
    return arr.reduce((array, item)=> array.concat(Array.isArray(item) ? flatenArray(item) : item), []);
}

toString + split

数组的toString有个很大的特点是自动扁平化数据

[1,[2,3],[4,5, [6, 7]]].toString()
"1,2,3,4,5,6,7"

所以可以利用这个特点,配合split

[1,[2,3],[4,5, [6, 7]]].toString().split(',').map(v=>parseInt(v))
[1, 2, 3, 4, 5, 6, 7]

join + split

原理同toString

[1,[2,3],[4,5, [6, 7]]].join(',').split(',').map(v=>parseInt(v))
[1, 2, 3, 4, 5, 6, 7]