vue数据结构处理+反显问题 ??

我这段代码处理的有什么问题吗 handle函数中的forEach都提示list.forEach is not a function
处理麻木了 大佬们有思路可以提供下 感谢感谢

 _this.$nextTick(() => {
    // planCounty是全部的数据 这段数据是头条的city省市区县数据
    // val是已经选中的数据 
      let planCounty = adAudience.$refs.region.$refs.planCounty
      console.log(planCounty)
      const handle = (list) => {
        if (!Array.isArray(list)) return
        list.forEach((item) => {
          const itemList = item.children || list
          const ids = []
          const fn = (list) => {
            if (list.length === 0) return false
            list.forEach((v) => {
              if (val.includes(v.id)) {
                ids.push(v.id)
              }
            })
            return list.every((v) => {
              if (v.children && v.children.length > 0) return fn(v.children)
              return val.includes(v.id)
            })
          }
          const isAll = fn(itemList)
          if (isAll) {
            arr.push(item.id)
          } else if (item.children && item.children.length > 0) {
            handle(item.children)
          } else {
            arr.push(...ids)
          }
        })
      }
      const threeLevelData = planCounty.cityLevelList.map((city) => {
        return {
          id: city.id,
          name: city.name,
          children: city.children.map((county) => {
            return {
              id: county.id,
              name: county.name,
              children: county.children
                ? county.children.map((town) => {
                    return {
                      id: town.id,
                      name: town.name
                    }
                  })
                : county
            }
          })
        }
      })
      console.log(threeLevelData)
      const arr = []
      handle(threeLevelData)
      adAudience.$refs.region.planCounty = arr
    })
阅读 1.5k
2 个回答

要保证 planCounty.cityLevelList 和 item.children 都是数组,你改一下这两行代码试试:

if (Array.isArray(item.children) && item.children.length > 0) {
    handle(item.children);
}

把这行 const itemList = item.children || list 改成下面的

const itemList = Array.isArray(item.children) ? item.children : list;

截屏2023-04-19 19.07.21.png
这里的children赋值为country时就不是数组了,然后你fn那个函数里没有判断list参数是不是数组,country.length用的也是全等号(三个等)即undefined === 0是不成立的,那么就继续往下走,就会出现country.forEach的情况,那就报错了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题