我是靠谱客的博主 追寻小懒猪,最近开发中收集的这篇文章主要介绍JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Q:什么是数组扁平化?
A:把一个多维数组变成一维数组就是数组扁平化
例如:
[1, 2, [3, 4, [5, 6, [7, 8, [9]]]]]
- 拉伸为一维数组
[1, 2, 3, 4, 5, 6, 7, 8, 9]
- 拉伸为二维数组
[1, 2, 3, 4, 5, 6, 7, 8, [9]]
- 拉伸为三维数组
[1, 2, 3, 4, 5, 6, 7, 8, [7, 8, [9]]]
- 拉伸一层
[1, 2, 3, 4, [5, 6, [7, 8, [9]]]]
- 拉伸两层
[1, 2, 3, 4, 5, 6, 7, 8, [7, 8, [9]]]
Q:数组扁平化有什么作用?
A:这个其实我也不知道,我也是停留在理论层面,没有什么实战经验的。但是 据我老师说,可以处理复杂的后台数据。你想一下,如果你接受到一个json文件,里边的数据一层一层一层又一层的洋葱一样的嵌套,那你要取用数据就是很麻烦的,所以比就需要把它扁平化处理。
好了不扯了。
文章目录
- 1.ES6的flat()
- 2.借助JSON方法
- 3.递归
- 4.reduce()递归
- 5.迭代
1.ES6的flat()
语法:var newArray = arr.flat(depth)
- depth:指定要拉伸的层数,默认值为1。
默认不写参数,就将其拉伸一层。
参数写Infinity直接拉伸成一维数组
2.借助JSON方法
let arr = [1, 2, [3, 4, [5, 6, [7, 8, [9]]]]]
let res = JSON.stringify(arr) //res = [1,2,[3,4,[5,6,[7,8,[9]]]]] (string)
res = res.replace(/[|]/g,'') //res = 1,2,3,4,5,6,7,8,9 (string)
res = '[' + res + ']' //res = [1,2,3,4,5,6,7,8,9] (string)
res = JSON.parse(res) //res = [1, 2, 3, 4, 5, 6, 7, 8, 9](array)
如果嫌麻烦你可以写成一句
let res = JSON.parse(`[${JSON.stringify(arr).replace(/([|])/g, '')}]`)
3.递归
function flat(arr) {
let result = []
for (let i of arr) {
i instanceof Array ? result = result.concat(flat(i)) : result.push(i)
//i是Array的实例?是的话继续递归展开,不是的话将i放入结果数组
}
return result
}
flat(arr)
4.reduce()递归
reduce()
方法介绍:
- 语法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- 参数:
- function(total,currentValue, index,arr)
- total 必需。初始值, 或者计算结束后的返回值。
- currentValue 必需。当前元素
- currentIndex 可选。当前元素的索引
- arr 可选。当前元素所属的数组对象。
- initialValue 可选。传递给函数的初始值
- function(total,currentValue, index,arr)
function flat(arr) {
return arr.reduce((a, i) => {
return a.concat(i instanceof Array ? flat(i) : i)
}, [])
}
flat(arr)
- function -
(a, i) => {...}
- total - a
- currentValue - i
- initialValue -[]
5.迭代
some()
方法介绍:
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:
- 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测,不会改变原始数组。 - 语法:
array.some(function(currentValue,index,arr),thisValue)
- 参数:
- function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数
- currentValue 必须。当前元素的值
- index 可选。当前元素的索引值
- arr 可选。当前元素属于的数组对象
- thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
如果省略了 thisValue ,“this” 的值为 “undefined”
- function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数
while (arr.some(Array.isArray)) {
arr = [].concat(...arr);
}
回顾知识点啦。
最后
以上就是追寻小懒猪为你收集整理的JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代的全部内容,希望文章能够帮你解决JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复