博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS数组扁平化处理
阅读量:2052 次
发布时间:2019-04-28

本文共 1517 字,大约阅读时间需要 5 分钟。

什么是数组扁平化?

数组扁平化是指将一个多维数组变为一维数组

[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]

1. reduce

遍历数组每一项,若值为数组则递归遍历,否则concat。

function flatten(arr) {
return arr.reduce((result, item)=> {
return result.concat(Array.isArray(item) ? flatten(item) : item); }, []);}

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

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

// 求数组的各项值相加的和: arr.reduce((total, item)=> {
// total为之前的计算结果,item为数组的各项值 return total + item;}, 0);

2. toString & split

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组

function flatten(arr) {
return arr.toString().split(',').map(function(item) {
return Number(item); })}

因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型

3. join & split

和上面的toString一样,join也可以将数组转换为字符串

function flatten(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item); })}

4. 递归

递归的遍历每一项,若为数组则继续遍历,否则concat

function flatten(arr) {
var res = []; arr.map(item => {
if(Array.isArray(item)) {
res = res.concat(flatten(item)); } else {
res.push(item); } }); return res;}
  1. 扩展运算符
    es6的扩展运算符能将二维数组变为一维
//ES6 增加了扩展运算符,用于取出参数对象的所有可遍历属性,拷贝到当前对象之中:var arr = [1, [2, [3, 4]]];console.log([].concat(...arr)); // [1, 2, [3, 4]]//我们用这种方法只可以扁平一层,但是顺着这个方法一直思考,我们可以写出这样的方法:// 改进var arr = [1, [2, [3, 4]]];function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr); } return arr;}console.log(flatten(arr))

转载地址:http://jkylf.baihongyu.com/

你可能感兴趣的文章
算法工程师 面经2019年5月
查看>>
搜索架构师 一面面经2019年6月
查看>>
稻草人手记
查看>>
第一次kaggle比赛 回顾篇
查看>>
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【F12】谷歌浏览器--前台效果可以在不访问服务器的前提下直接改样式看效果是否是预期值。...
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>