数组扁平化

172 阅读2分钟

Array 数组对象可以用一个变量来存储一系列相同或不同类型的值,其中存储的每个值称为数组元素。 数组元素可以为字符、数值、函数、数组等等。如果数组的元素还是数组的形式,就叫做多维(嵌套)数组。

var arr=[1,[2,[[3,4],5],6]];

如果想对多维数组,进行扁平化处理,即 多维数组 ⋙ 一维数组

可以完成一个函数,接受数组作为参数,调用函数返回扁平化后的数组:

var arr=[1,[2,[[3,4],5],6]];
var r=[];
// 写一个function 传入两个参数,一个是数组,一个作返回值
function flat(arr,r){
    // 写一个for循环 遍历数组
    for(var i=0;i<arr.length;i++){
        // 对数组中的每一项进行判断
        if(typeof arr[i]==="number"){
            // 如果数据类型是数值型 添加给返回值
            r.push(arr[i]);
        }else{
            // 如果不是数值型 再次执行 flat
            flat(arr[i],r);
        }
    }
}
flat(arr,r);
console.log(r);

而ES6提供了一个更简单快捷的方法,Array.prototype.flat(),用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。

flat() 函数仅采用一个参数,参数可自行设置,原始数组包含一个或多个嵌套数组结构时,由此参数决定拉平的层数。

  • 没有参数的情况下,默认值为1,即会“拉平”一层,如果想要“拉平”多层的嵌套数组,传入想要拉平的层数(整数)作为参数即可。
arr.flat()
// [1, 2, [[3,4],5], 6]

arr.flat(2)
// [1, 2, [3,4], 5, 6]
  • 如果原始数组中具有任何深度的所有数组都需被展平,可以使用 Infinity 作为参数。
arr.flat(Infinity); 
//[1, 2, 3, 4, 5, 6]
  • 如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]