最近写项目中遇到一个问题 多级嵌套数组对象总是需要传递下标或者key 才可以访问下一级数据 可是如果我传入字符串就无法直接访问
[1,[2,3],[4,5,[6]] ---->[1,2,3,4,5,6]
1.reduce
遍历数组每一项,若值为数组则递归调用否则合并
const arr = [1, [2, 3, [4, 5]], 6]
function fn(arr) {
return arr.reduce((prev, cur, index) => {
if (Array.isArray(cur)) {
return prev.concat(fn(cur))
} else {
return prev.concat(cur)
}, [])
console.log(fn(arr));
reduce是数组中的一种方法
2.toString & split
调用数组的 toString 方法,将数组变为字符串再用 split 分割还原为数组
function fn(arr) {
return arr.toString().split(',').map(function (item) {
return Number(item)
3. join & split
和上面的toString 方法类似 join 也可以将数组转化为 字符串
function fn(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item);
递归的遍历每一项,若为数组则继续遍历,否则 concat
function fn(arr) {
let res = []
arr.map(item => {
if (Array.isArray(item)) {
res = res.concat(fn(item))
} else {
res.push(item)
return res;
5. 拓展运算符
es6 的扩展运算符能将二维数组变为一维
[].concat(...[1, 2, 3, [4, 5]])
遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。
对象的方法
1.reduce
通过递归合并和拼接路径进行转换为 arr.name=value
const fillObj = (types, actionKey = '') => {
let res = Object.keys(types).reduce((msg, nextvs): any => {
const value = types[nextvs]
const Key = actionKey ? `${actionKey}.${nextvs}` : nextvs
if (typeof value === 'object') {
Object.assign(msg, fillObj(value, nextvs))
} else {
msg[Key] = value
return msg
}, {})
return res
欢迎提出建议
---记录旅行遇到的事迹 仅用于旅行记录 欢迎志同道合的朋友
- 1.2w
-
十七喜欢前端
JavaScript
掘金·日新计划
- 64.7w
-
12224
Vue.js
React.js
- 1424
-
程序员Better
JavaScript
- 1652
-
nanfeiyan
JavaScript
- 63.3w
-
11028
来碗盐焗星球
JavaScript
掘金·金石计划
- 2005
-
yeyan1996
JavaScript