vue 一维 数组 转换成三维 数组

在这里插入图片描述
打印结果
在这里插入图片描述

一维数组:

在这里插入图片描述

转成 3维后:

在这里插入图片描述

dataChange(arr) {
      let keys = Object.keys(arr[0]);
      let level1 = keys[0]; //获取一级属性名称
      let level2 = keys[1]; //获取二级属性名称
      let level3 = keys[2]; //获取三级属性名称
      let level4 = keys[3]; //获取4级属性名称
      let level5 = keys[4]; //获取5级属性名称
      let list = Array.from(
        new Set(
          arr.map((item) => {
            return item[level1];
          })
        )
      );
      let subList = [];
      list.forEach((res) => {
        arr.forEach((ele) => {
          if (ele[level1] === res) {
            let nameArr = subList.map((item) => item.itemName);
            if (nameArr.indexOf(res) !== -1) {
              let nameArr2 = subList[nameArr.indexOf(res)].childItem.map(
                (item) => item.itemName
              );
              if (nameArr2.indexOf(ele[level2]) !== -1) {
                subList[nameArr.indexOf(res)].childItem[
                  nameArr2.indexOf(ele[level2])
                ].childItem.push({
                  firstItemName: ele[level1],
                  secondItemName: ele[level2],
                  thirdItemName: ele[level3],
                  detectionResult: ele[level4],
                  detectionExplain: ele[level5],
                });
              } else {
                subList[nameArr.indexOf(res)].childItem.push({
                  itemName: ele[level2],
                  childItem: [
                    {
                      firstItemName: ele[level1],
                      secondItemName: ele[level2],
                      thirdItemName: ele[level3],
                      detectionResult: ele[level4],
                      detectionExplain: ele[level5]
                    },
                  ],
                });
              }
            } else {
              subList.push({
                itemName: res,
                childItem: [
                  {
                    itemName: ele[level2],
                    childItem: [
                      {
                        firstItemName: ele[level1],
                        secondItemName: ele[level2],
                        thirdItemName: ele[level3],
                        detectionResult: ele[level4],
                        detectionExplain: ele[level5],
                      },
                    ],
                  },
                ],
              });
            }
          }
        });
      });
      return subList;
    },
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
V-for 是 Vue.js 中用于遍历数据并生成 DOM 结构的一种指令。对于处理二维数组的去重需求,这里提供一种基于 JavaScript 和 Vue 的方法来进行解释。 ### 二维数组去重思路: 1. **将二维数组一维**:首先需要把原始的二维数组通过某种方式转化一维数组。例如,如果有一个二维数组 `arr` ,每一行表示一组元素,则可以使用 `.flat()` 方法将其展平成一维数组。 2. **利用 Set 进行去重**:Set 是 ES6 引入的一种数据结构,它只存储唯一的值,因此非常适合用于去除数组中的重复项。创建一个 `new Set()` 并向其中添加展平后的元素,Set 自动会过滤掉重复的元素。 3. **转换回二维数组形式**:得到唯一元素的 Set 后,可以根据原来数组的形状恢复其二维形式。这通常涉及计算出原数组的最大深度,然后根据这个深度重新构造数组。 ### 实现步骤: 假设我们有如下的二维数组 `originalArray`: ```javascript const originalArray = [ ['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h'], ['a', 'b'] ]; ``` #### 第一步:展平数组 使用 `.flat(Infinity)` 将二维数组变为一维数组: ```javascript const flattenedArray = originalArray.flat(Infinity); ``` #### 第二步:使用 Set 去重 将展平后的数组转换为一个 Set: ```javascript const uniqueSet = new Set(flattenedArray); ``` #### 第三步:重组为二维数组 计算一维数组的长度,根据这一长度以及原二维数组的平均宽度(即每个子数组的平均长度),来重组为二维数组。假设每个子数组的长度大致相等: ```javascript function reshapeTo2D(arr, length) { let result = []; for (let i = 0; i < arr.length; i += length) { result.push(arr.slice(i, i + length)); } return result; } const uniqueFlattenedArray = [...uniqueSet]; // 转换成普通数组以便操作 const dimensionLength = Math.ceil(uniqueFlattenedArray.length / originalArray.length); const finalArray = reshapeTo2D(uniqueFlattenedArray, dimensionLength); console.log(finalArray); // 输出去重后的二维数组 ``` ### 相关问题: 1. 在JavaScript中如何判断两个数组是否完全相等? 2. Vue.js如何使用v-for循环遍历二维数组? 3. 解释一下为什么在处理大型数据集时使用Set比使用传统方法更高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值