美文网首页
这两个方法花了一天的时间写出来的,记录一下以免弄丢了

这两个方法花了一天的时间写出来的,记录一下以免弄丢了

作者: 风海天 | 来源:发表于2020-04-23 20:38 被阅读0次
  • 级联数组转换为字符串数组
parseDataToCascader(insertArr) {
        let returnArr = []; // 最后返回的数组
        let mapList = {}; // 保存级联关联状态的对象
        let itemLength = []; // 保存数组的length长度, 取出最大值
        // 遍历数组 获取到级联名称 EP: item => '一级1-二级1-三级1'
        for (let item of insertArr) {
          // 获取 级联 名称数组 EP: itemsArr => ['一级1', '二级1', '三级1']
          let itemsArr = item.split('-');

          // 遍历层级名称数组 获取当前级联层级名称 EP: key => '一级1'
          for (let key of itemsArr) {
            // sort 区分级联的层级 EP: sort => 0
            let sort = itemsArr.indexOf(key);
            if (itemsArr.length > 1) {
              // 处理数据
              getMapList(sort, itemsArr);
            }
          }

          // 将数组的length取出组成新的数组取出最大值
          itemLength.push(itemsArr.length);
        }

        if (itemLength.length > 0) {
          itemLength.sort((a, b) => {
            return a - b;
          });
          this.formData.isCascade = itemLength[itemLength.length - 1];
        }


        /**
         * 处理数据的外层函数 为子递归提供参数遍历参数
         * @param {Number} sort 当前级联层级 EP: sort => 0
         * @param {Array} itemsArr 当前级联数组 EP: itemsArr => ['一级1', '二级1', '三级1']
         */
        function getMapList(sort, itemsArr) {
          // 保存当前级联层级
          let _sort = sort;
          // 递归次数 用于建立级联关联状态
          let i = -1;

          // 开始赋值
          assignValueToArray(mapList, returnArr);

          /**
           * 递归调用 循环赋值
           * @param {Object} mapObj 级联关系对象
           * @param {Array} rtnArr 当前级联对象对应的实际数组
           */
          function assignValueToArray(mapObj, rtnArr) {
            // 递归次数 + 1 用于 sort !== 0 时 获取实际级联关系对象
            i += 1;

            // 如果级联层级 === 0 进行赋值操作
            if (sort === 0) {
              // 当前级联对象已存在的关联关系数组
              let existedKeys = Object.keys(mapObj);
              // 当前级联名称
              let _value = itemsArr[_sort];

              // 不存在关系则建立关系并赋值
              if (existedKeys.indexOf(_value) === -1) {
                // 建立级联关系匹配对应数组的 index 值
                mapObj[_value] = {
                  key: Number(existedKeys.length)
                };

                // 建立赋值对象
                let appendObj = {
                  value: _value,
                  label: _value
                };

                // 为非最底层级联添加 children 对象
                if (_sort !== itemsArr.length - 1) {
                  mapObj[_value].children = {};
                  appendObj.children = [];
                }

                // 数组赋值
                rtnArr[mapObj[itemsArr[_sort]].key] = appendObj;
              }
            } else {
              // 如果级联层级 !== 0 递归调用自身 传递下一级级联的关系和数组 初始 i 值为 0;
              sort -= 1;
              // 递归调用自身
              assignValueToArray(mapObj[itemsArr[i]].children, rtnArr[mapObj[itemsArr[i]].key].children);
            }
          }
        }

        console.log(returnArr);
        // 返回处理后的数组
        return returnArr;
      }
  • 字符串数组转换为级联数组
cascaderToParseData: function (data) {
        let result = []; // 最终返回的数组
        let INDEX = 0;
        let flattenArray = (list, array, index) => {
          let items = array || [];
          index ++;
          list.forEach(item => {
            if (items.length < index) {
              items.splice(index - 1, 0, item.label);
            } else {
              items.splice(index - 1, 1, item.label);
            }
            if (item.children) {
              flattenArray(item.children, items, index);
            } else {
              result.push(items.join('-'));
            }
          });
        };
        flattenArray(data, [], INDEX);
        return result.join('\n');
      }

相关文章

  • 这两个方法花了一天的时间写出来的,记录一下以免弄丢了

    级联数组转换为字符串数组 字符串数组转换为级联数组

  • SpringBoot+Mybatis+Sharding-JDBC

    花了2天时间研究了一下Sharding-JDBC的使用,这里简单记录一下。代码弄的比较乱,就没放到git上,需要源...

  • 百人百天百炼(2)19/100

    今天听了时间管理的拖延症的速效救星丸2 有两个方法,感觉这两个方法有一点的作用,记录一下。 方法3:化整为零 降低...

  • iOS中 单选框的实现

    最近公司需求 需要做一个有很多单选框的页面 研究了一下 花了一天时间 写出来了(新手 大家见谅) 先说一下实现思路...

  • iOS小总结以及犯的错误

    早就想弄一个出来,直到今天才真正写出来... 以后有什么不懂得或者需要记录的会发到这里面。持续更新! 方法: 总结...

  • CocoaPods安装和使用

    最近嫌弃MAC里的垃圾太多了,重装了一下系统。导致CocoaPods也需要重装。下面记录一下方法,以免忘记了。Ma...

  • 牵挂

    被一个梦惊醒,心跳都有点加速,紧张,虽然睡眠时间很短,但还是醒来记录,以免忘记这场梦。 梦见我把石头和曼曼弄丢了。...

  • 你应该为你自己的文章负责

    有时我发现,花了好半天写出来的文章,自我感觉良好,但是写出来后,看的人寥寥无几。花了时间花了精力,认真真的...

  • 记matplotlib的x时间轴绘图

    遇到一个项目的matplotlib的绘图需求,其中的x时间轴花了好些时间才完成,记录一下。 需求:7天的数据,一天...

  • (四)用CollapsingLayout搭建HeroDetail

    这个地方花了蛮长时间来弄,主要是因为对这些方法不太熟。这个CollapsingLayout是MaterialDes...

网友评论

      本文标题:这两个方法花了一天的时间写出来的,记录一下以免弄丢了

      本文链接:https://www.haomeiwen.com/subject/wtzcrctx.html