如何将二维数组转化为一维数组?

362 阅读1分钟

1. flat

[
[1,2],
[3,4]
].flat();
// [1,2,3,4]

flat可以将任意维数组转成一维数组,只需要传入被扁平化的层数。 如三维数组则flat(2).如果是未知,则传入Infinity

2. concat + 扩展符

[].concat(
  ...[
    [1, 2],
    [3, 4],
  ]
); // [1,2,3,4]

3. reduce + concat

[
[1,2],
[3,4]
].reduce((acc, cur) => acc.concat(cur), []);

4. toString + split

转成字符串后再split转数组 tips: 有局限性,不适用于有特殊子元素类型的数组,如null,undefined,对象类型等。

[
[1,2],
[3,4]
].toString().split(',').map(item => +item);

5. 递归降维

forEach

const newArr = []
const flatArr = arr => {
    arr.forEach(item => {
        if (Array.isArray(item) {
            flatArr(item)
        } else {
            newArr.push(item)
        }
    }
};
flat([[1, 2], [3, 4]]);

reduce

const flatArr = arr => {
    arr.reduce((prev, cur, index, arr) => {
        if (Array.isArray(item) {
            return prev.concat(...flatArr(item))
        }
        return prev.concat(item)
    }, [])
}