JS利用递归遍历数组,筛选得到需要的数据

前言

本文章是开发中遇到的问题,对于后端返回的数据中需要进行筛选的问题

代码如下

后端返回的数据中很多是我不需要的,所以进行筛选,如果使用axios中发送请求获取数据的话,可以在拦截器中进行操作

数据:
let list = [
    {
      "id": 1,
      "name": "11",
      "code": "22",
      "parentId": 0,
      "level": 0,
      "sort": 1,
      "isActive": false,
      "childList": [
        {
          "id": 3,
          "name": "33",
          "code": "22",
          "parentId": 1,
          "level": 1,
          "sort": 1,
          "isActive": false,
          "childList": [
            {
              "id": 5,
              "name": "55",
              "code": "22",
              "parentId": 3,
              "level": 2,
              "sort": 1,
              "isActive": false,
              "childList": null
            },
            {
              "id": 6,
              "name": "6",
              "code": "22",
              "parentId": 3,
              "level": 2,
              "sort": 1,
              "isActive": true,
              "childList": null
            }
          ]
        },
        {
          "id": 4,
          "name": "44",
          "code": "22",
          "parentId": 1,
          "level": 1,
          "sort": 1,
          "isActive": true,
          "childList": []
        }
      ]
    },
    {
      "id": 2,
      "name": "22",
      "code": "22",
      "parentId": 0,
      "level": 0,
      "sort": 1,
      "isActive": false,
      "childList": []
    }
  ]
操作代码:
/* 遍历数组挑选深复制+改名 */
function arrHandle(arr) {
    // 定义一个外围数组,用于保存所有数据
    let newArr = []
    arr.forEach(item => {
        // 在循环是每循环到一个成员,定义一个对象,用于保存当前所有的数据
        let obj = {}
        // 使用for-in循环遍历对象获取对象的key
        for (let i in item) {
            // 利用instanceof判断对象该项是不是个数组,如果是那么进行递归,重新遍历保存
            if (item[i] instanceof Array) {
                obj.children = arrHandle(item[i])
            } else if (['id','name','level'].inculdes(i)) { // 列出你所需要的key
                // 进行改名操作,因为是对同一项进行判断,所以使用switch

				const data = {
					id: 'key',
					name: 'title',
					level: 'level'	
				}
				obj[data[i]] = item[i]
                // 如果不需要更改key的名称,那么可以直接进行添加
                // obj[i] = item[i]
            }
        }
        // 在遍历完成后将obj整个添加到外围数组中
        newArr.push(obj)
    })
    // 染回外围数组
    return newArr
}
输出结果:

在这里插入图片描述
本文主要是针对日常工作中遇到的一些小问题,如果有更好的方法,或发现错误留言,我会即使修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值