php对数组扁平化处理,数组扁平化处理的几种方式整理

本文介绍了五种将多维数组转换为一维数组的方法,包括使用reduce与递归、toString().split(','), 递归遍历、ES6的flat方法及扩展运算符,帮助读者理解和掌握数组扁平化的多种实现方式。
摘要由CSDN通过智能技术生成

数组的扁平化处理 即多维数组转化为一维数组;

首先第一种:   reduce+递归;

reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce包含两个参数:回调函数,传给total的初始值

let arr1 = [1,2,3,[4],[5,6],[7,8,[9],[10,11,[12,13,[14]]]]];

const flatten = arr1 => arr1.reduce(

(acc,val) => acc.concat(Array.isArray(val)? flatten(val):val),[]

)

console.log(flatten(arr1));

第二种:toString().split(',')

这个就比较粗暴了 不过返回值会变成string类型 若是要求数据类型可以在遍历一次强转number;

let arr1 = [1,2,3,[4],[5,6],[7,8,[9],[10,11,[12,13,[14]]]]];

function changeArrType(arr1){

let arr2 = arr1.toString().split(',');

//let arr2 = arr1.join(',').split(','); join也可以实现

let newArr = arr2.map((item)=>{ //map方法转number类型 根据自己需要处理

return Number(item)

})

return newArr;

}

console.log(changeArrType(arr1))

第三种: 递归实现

遍历每一项,判断是不是数组,是数组就把这项取出来再遍历;

let arr1 = [1,2,3,[4],[5,6],[7,8,[9],[10,11,[12,13,[14]]]]];

let newArr1 = [];

function oneDimensionalArray(arr){

for(let i=0;i

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

oneDimensionalArray(arr[i])

}else{

newArr1.push(arr[i]);

}

}

}

oneDimensionalArray(arr1);

console.log(newArr1);

第四种:ES6的flat方法

首先flat()默认只会“拉平”一层

let arr = [1,2,[,4,5]]

console.log(arr.flat())

如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数

let arr = [1,2,[3,4,[5,6]]]

let arr1 = [1,2,[3,4,[5,6,[7,8]]]]

console.log(arr.flat(2),arr1.flat(3))

那么对于不知道急几层嵌套的该怎么办? 细心的同学可以发现 上面的例子中的arr拉伸时

我们传入只要大于2的数字就可以把数组完全拉伸开(arr1的参数需要>=3)。那么问题就好解决了

用Infinity 作为关键字   有兴趣的小伙伴可以去看看实现的代码

let arr = [1,2,3,4,5,[6,7,[8,9,[10,11,[12,13]]]]];

console.log(arr.flat(Infinity))

第五种:扩展运算符

es6的扩展运算符能将二维数组变为一维

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

根据这个我们可以自己封装个遍历方法,若arr中含有数组则使用一次扩展运算符,直至没有为止,其思想和第三种一样

let arr1 = [1,2,3,4,5,[6,7,[8,9,[10,11,[12,13]]]]];

function flatten(arr) {

while(arr.some(item=>Array.isArray(item))) {

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

}

return arr;

}

console.log(flatten(arr1))

总结:

上述我们一共说了几种方法,仔细发现他们实现的核心都是通过遍历,判断每项是不是数组,

然后通过concat或者新建空数组来拼接或者保存

标签:flat,arr,console,扁平化,数组,几种,let,arr1

来源: https://blog.csdn.net/weixin_47975113/article/details/106801363

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值