IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Cascader多选,数据处理(返回给后端,回填数据) -> 正文阅读

[JavaScript知识库]Cascader多选,数据处理(返回给后端,回填数据)

数据处理

思路:
1.先创建必要的函数: 数组打平flat,递归树(deepTree),模板(temp)
2.发送数据:首先把你选择的数据格式, deepTreeData(tree, flat(selectedTree), [‘id’]) 选择的数据格式,
3.然后转换成发送的格式, sendSelectedData(tree, flat(selectedTree), [‘id’, ‘name’])
4.回填数据:把发送的数据打平, splitArr(sendSelectedData(tree, flat(selectedTree)), [‘id’]
5.转换成选中的格式 deepTreeData(tree, flat(selectedTree), [‘id’])

方法一:

  // // 原始数据
        let tree = [{
                id: 1,
                name: "测试",
                children: [{
                        id: 11,
                        name: '测试11',
                        children: [{
                                id: 11113,
                                name: '测试11'
                            },
                            {
                                id: 11111113,
                                name: '测试12'
                            }
                        ]
                    },
                    {
                        id: 12,
                        name: '测试12'
                    }
                ]
            },
            {
                id: 2,
                name: "测试",
                children: [{
                        id: 21,
                        name: '测试21'
                    },
                    {
                        id: 22,
                        name: '测试22'
                    }
                ]
            }
        ]
        // 选择的数据
        let selectedTree = [
            [1, 11, 12, 11111113, 11113],
            [2, 21]
        ]
        //要发送的数据格式
        // [{
        //     id: 1,
        //     name: '测试'
        // }]

        // 思路:
        // 1.先创建必要的函数: 数组打平flat,递归树(deepTree),模板(temp)
        // 2.发送数据:首先把你选择的数据格式, deepTreeData(tree, flat(selectedTree), ['id'])   选择的数据格式,
        // 3.然后转换成发送的格式,  sendSelectedData(tree, flat(selectedTree), ['id', 'name'])
        // 4.回填数据:把发送的数据打平, splitArr(sendSelectedData(tree, flat(selectedTree)), ['id']
        // 5.转换成选中的格式  deepTreeData(tree, flat(selectedTree), ['id'])



   		console.log("-------------原始全部数据-----------------")
        console.log(tree)



        console.log("-------------选中原始数据-----------------")
        console.log(selectedTree)




        // 数组打平
        function flat(tree) {
            if (!Array.isArray(tree)) return
           return tree.flat(Infinity)

        }
        console.log("-------------选中的数据打平-----------------")
        console.log(flat(selectedTree))


        // 返回数据的格式

        function temp(arr, data) {
            let copyObj = {}
            if (arr.length > 1) {
                arr.forEach(item => {
                    copyObj[item] = data[item]
                })
                return copyObj
            } else {
                return data[arr[0]]
            }
        }


        // 递归使用tree(已经选中,获取对应的键值对)
        var copySelected = []

        function deepTree(tree, selectedTree, arr = ['id', 'name']) {
            tree.forEach(item => {
                selectedTree.includes(item.id) ? copySelected.push(temp(arr, item)) : ''
                if (item.children) {
                    deepTree(item.children, selectedTree, arr)
                }
            });
        }



        // 回填选中数据
        function deepTreeData(tree, selectedTree, arr = ['id', 'name']) {
            let selected = []
            
            
            tree.forEach(item => {
                copySelected = []
                selectedTree.includes(item.id) ? copySelected.push(temp(arr, item)) : ''
                deepTree(item.children, selectedTree, arr)

                selected.push([...copySelected])
            })
            return selected
        }

        // 发送的数据需要的格式

        function sendSelectedData(tree, selectedTree, arr1) {
            let copyData = []
            let data = deepTreeData(tree, selectedTree, arr1)
            data.forEach(item => {
                item.forEach(innerItem => {
                    copyData.push(innerItem)
                })
            })
            return copyData
        }


        console.log("-------------要发送的数据-----------------")
        console.log(sendSelectedData(tree, flat(selectedTree), ['id', 'name']))





        // 拆分
        function splitArr(data, id) {
            return data.map(item => {
                return item[id]
            })
        }

        console.log("-------------回填数据打平-----------------")
        console.log(splitArr(sendSelectedData(tree, flat(selectedTree)), ['id']))






        console.log("-------------渲染数据-----------------")

        let arr = deepTreeData(tree, flat(selectedTree), ['id'])

        console.log((arr))
        

在这里插入图片描述

方法二:





        let str = '12###234,34###345'




        let strArr = [
            [1, 2],
            [4, 5]
        ]

        function splitArr(dataStr) {
            let strCopy = dataStr.split(',')
            return strCopy = strCopy.map(item => {
                return item.split('###')

            });
        }

        function splitStr(dataArr) {
            let dataArrCopy = ''
            dataArr.map(item => {
                const innerStr = item.join('###')
                dataArrCopy+=','+innerStr
                
            })
            return dataArrCopy.slice(1)
            
        }

        console.log(splitArr(str))
        console.log(splitStr(strArr))

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:22:00  更:2022-02-26 11:25:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:53:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码