美文网首页
Js数组扁平化

Js数组扁平化

作者: small_zeo | 来源:发表于2021-01-17 18:40 被阅读0次

什么是数组扁平化?

['a','b','c'] //这是一个拥有3个元素的数组,是一个一维数组(不存在数组嵌套)。[['a','b'],['c','d'],['e','f']] 从整体上看是一个数组,但是其中的元素又是数组,即数组中嵌套数组,这就是二维数组。

数组扁平化的方法

1.es6提供的新方法flat(depth)

let a = [1,[2,3]];

a.flat();

// [1,2,3]

a.flat(1);

//[1,2,3]

flat(depth) 方法中的参数depth,代表展开嵌套数组的深度,默认是1

所以我们可以添加参数1,或者直接调用flat()来对2维数组进行扁平化,如果我们可以提前知道数组的维度,对这个数组进行扁平化处理,参数depth的值就是数组的维度减一。

let a = [1,[2,3,[4,[5]]]];

a.flat(4-1);

// [1,2,3,4,5]  a是4维数组

其实还有一种更简单的办法,无需知道数组的维度,直接将目标数组变成1维数组。depth的值设置为Infinity。

let a = [1,[2,3,[4,[5]]]];

a.flat(Infinity);

// [1,2,3,4,5]  a是4维数组

2. while循环

var arr1 = [1, 2, [3], [1, 2, 3, [4, [2, 3, 4]]]];

function flatten(arr) {

  while(arr.some(item =>

        Array.isArray(item))) {

        arr = [].concat(...arr);

//arr = Array.prototype.concat.apply([],arr);

}

return

arr;

}

    flatten(arr1);

//[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

同理,利用while判断加上some的遍历来实现扁平化。

3. for循环

var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]];

function flatten(arr) {

    var res = [];

    for(let i = 0, length = arr.length; i < length; i++) {

        if(Array.isArray(arr[i])) {

        res = res.concat(flatten(arr[i]));

//concat 并不会改变原数组

//res.push(...flatten(arr[i])); //扩展运算符

} else {

        res.push(arr[i]);

}

}

return

res;

}

  flatten(arr1);

//[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

利用for循环遍历数组的每一项并加以判断,如果不是数组,就执行push操作, 是数组的化,就再次执行该函数(递归),直至遍历完整个数组。

ps: ...和concat()可以进行替换,所以完全可以算是2种方法。

4. reduce方法

var arr1 = [1, 2, [3], [1, 2, 3, [4, [2, 3, 4]]]];

function flatten(arr) {

    return  arr.reduce((res, next) =>{

              return res.concat(Array.isArray(next)? flatten(next) :

next

);

},[]);

}

这里使用的是数组的reduce方法,需要注意的是reduce方法,我们传递了两个参数, 第一个参数就是就是处理扁平化的箭头函数 第二个参数是一个空数组,也是作为遍历的开始。

5. 如果数组的项全为数字,可以使用join(),toString()进行扁平化操作。

function flatten(input) {

    return input.toString().split(',').map(item=> +item);

// return input.join().split(',').map(item => +item);

// return input.join(',').split(',').map(item => +item);

}

flatten(arr1);

//[1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

原理很简单,先把数组转换成字符串,这个过程会把[]去掉,然后再调用split()方法转换成数组,最后不能忘了,把每一项转换为数组,即调用map()方法。

相关文章

  • js实现数组扁平化

    js实现数组扁平化 数组的扁平化,就是将一个嵌套多层的数组array(嵌套可以是任何层数)转换为只有一层的额数组。...

  • js数组与对象常用操作方法

    一、Js相关数组操作 数组去除相同的 数组添加数数据 数组反转 打乱数组排序 取数组的前几个 数组扁平化 遍历对象...

  • 封装常用数组操作函数

    1. 数组扁平化 方法一 : 递归迭代数组 方法二 : 通过js原生 falt方法展开数组 方法三 通过正则...

  • js数组扁平化

    扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 递归 e...

  • js数组扁平化

    1、 利用apply和concat转换 2、reduce 3、多维数组递归降维

  • js数组扁平化

    现在有一个需求: 多维数组=>一维数组; var arr = [1,2,[3,4,[5,6,[7,8]]],[9,...

  • Js数组扁平化

    什么是数组扁平化? ['a','b','c'] //这是一个拥有3个元素的数组,是一个一维数组(不存在数组嵌套)。...

  • 5种方式实现数组扁平化

    5种方式实现数组扁平化 数组扁平化概念 数组扁平化是指将一个多维数组变为一维数组 实现 1. reduce 遍历数...

  • 手撕常见面试题

    DOM 事件代理 数组 对象 扁平化 去重 - unique() 拷贝 浅拷贝 深拷贝 copy()函数实现 JS...

  • Array, Object扁平化

    1. 数组扁平化 数组扁平化就是将多维数组转化为一维数组: 1.1 toString + split 先将数组转化...

网友评论

      本文标题:Js数组扁平化

      本文链接:https://www.haomeiwen.com/subject/mzqzaktx.html