vue 产品属性组合合并成表格显示(笛卡尔积)

  • 需求
    • 效果图

需求

今天经理要我完成一个属性的组合。并且在表格里面显示出来。如:选中规格一中的 A属性,B属性,规格二中的 C属性,D属性。规格三中的 E属性,F属性。那么组合成 A-C-E ,A-C-F ,A-D-E , A-D-F…的笛卡尔积组合下去。但是如果相同的属性要用同一表格。

工具 : element +vue

大部分代码来源:来自这位大佬的博客:https://blog.csdn.net/qq_42129422/article/details/88360784
但是他的有些不足之处就是当只有一个属性时候会出现一个问题。

原因 : vue会把一个数二维数组里面如果只有一个数组的话就会把二维数组转换为一维数组。从而导致这样出现。

解决:加上一个判断即可。当数二维数组里面只有一条数组时候就获取一维数组里面值。如果有那个大佬知道还有别的办法解决请告知或者知道把二维数组里面只有一条数组时候不转换为一维数组的也告知我。谢谢

// An highlighted block//转换数据getList() {this.tableData7 = [];this.newList = this.descartes(this.newData);if(this.shopType.length>1){   //在这进行判断是否为只有一条数组。for(let index = 0; index < this.newList.length; index++) {this.tableData7.push({color: this.newList[index][0],cailiao: this.newList[index][1],chima: this.newList[index][2],kucun: "",moany: ""});}}else{for(let index = 0; index < this.newList.length; index++) {this.tableData7.push({color: this.newList[index],kucun: "",moany: ""});}}this.getSpanArr(this.tableData7);console.log(this.tableData7);},//计算位置的方法getSpanArr(data) {this.spanArr = [];this.pos = "";this.spanArr1 = [];this.pos1 = "";for(var i = 0; i < data.length; i++) {if(i === 0) {this.spanArr.push(1);this.pos = 0;} else {// 判断当前元素与上一个元素是否相同if(data[i].color === data[i - 1].color) {this.spanArr[this.pos] += 1;this.spanArr.push(0);} else {this.spanArr.push(1);this.pos = i;}}}for(var i = 0; i < data.length; i++) {if(i === 0) {this.spanArr1.push(1);this.pos1 = 0;} else {//如果笛卡尔积一直递增下去的话 这是一个很蠢的方法 由于我的要求层数是已知的 这里偷懒了 不然应该用for循环if(data[i].cailiao === data[i - 1].cailiao) {this.spanArr1[this.pos1] += 1;this.spanArr1.push(0);} else {this.spanArr1.push(1);this.pos1 = i;}}}},
//其次还得要在合并行数哪里加一个判断。当只有一个属性时候那就第二个框不要合并。// 合并行数objectSpanMethod1({row,column,rowIndex,columnIndex}) {//我自己加上的if判断  this.shopType是一个数据源。if(this.shopType.length== 1) {if(columnIndex === 0) {const _row = this.spanArr[rowIndex];const _col = _row > 0 ? 1 : 0;return {rowspan: _row,colspan: _col};// columnIndex === 1 找到第二列,合并他的列数}} else {// columnIndex === 0 找到第一列,实现合并随机出现的行数if(columnIndex === 0) {const _row = this.spanArr[rowIndex];const _col = _row > 0 ? 1 : 0;return {rowspan: _row,colspan: _col};// columnIndex === 1 找到第二列,合并他的列数} else if(columnIndex === 1) {const _row = this.spanArr1[rowIndex];const _col = _row > 0 ? 1 : 0;return {rowspan: _row,colspan: _col};}}}

最后是我根据自己需求完成了最后的效果图。

效果图


或者选中两个属性的:

或者一个属性的:

产品属性组合合并成表格显示(笛卡尔积)相关推荐

  1. 多个vue项目合并成一个_集美们,快看如何一步将多个PDF合并成一个PDF

    之前的推文有提到,如何将多幅图片从word中提取出来.今天我们就一起来康康如何快速将多个PDF合并成一个PDF吧! 首先,我们需要一个PDF阅读器,这个阅读器可以是Foxit PDF Editor,也 ...

  2. 怎么让两个java文件关联,怎么把多个excel文件合并成一个【几个excle合并成一个】...

    怎么把多个excel文件合并成一个 新建一个BOOK文件,按Alt F11这二个键,VBA编辑界面,点击编辑的菜单:"插入"--"",然后在里面完整复制下面的代 ...

  3. python如何将两个list合并成字典_怎么把两个列表合并成字典 论Python怎样将两个list合并为一个字典...

    Python怎样把2个列表合成为一个字典? 怎样把2个列表合成一个字典里了?如果你从一开始就选择低下头的话你就可以一直低着头.可是如果你一开始选择了昂着头的话你就永远不能低头了.荣辱说到底只是一瞬间的 ...

  4. win10两个磁盘合并成一个?win10系统怎么合并磁盘

    某用户购置了一台电脑,在电脑城有专业的人员为他安装了操作系统,操作系统是win10,并且对磁盘做好了分区.但是在使用一段时间后,该用户发现,原来的磁盘分区非常不合理. 首先,磁盘分区过多,导致每个磁盘 ...

  5. html数组拼接,多个数组合并成一个

    如何优雅的将多个数组合并成一个数组 import java.util.Arrays; //Java中如何把两个数组合并为一个 public class gog { public static void ...

  6. 将多个txt文本文件合并成一个txt文件

    将多个txt文本文件合并成一个txt文件 方法一:批处理文件 有文档1.txt.2.txt 新建一个文档:合并文档.txt,在该合并文档中输入 copy/b 1.txt+2.txt 3.txt 将合并 ...

  7. 760-给定n个整数,将这n个整数合并成最大和最小的数字

    题目如下 给定n个整数,将这n个整数合并成最大和最小的数字 例如:34,567,9,88.合并的最大数字为98856734,最小数字为34567889 解题思路 找到数列的最大数字,将所有的数字变成和 ...

  8. Linux中将多块新硬盘合并成一个,挂载到/mysqldata目录下

    需求: 将两块空硬盘合并为"一块",挂载到指定目录(/data)下,达到在一个目录使用2块硬盘所有空间的效果. 逻辑卷管理(LVM) 逻辑卷 1.整合分散空间(整合未使用的磁盘空间 ...

  9. mysql和sqlserver共存_mysql 和sqlserver的 多行合并成一行

    mysql 和sqlserver的 多行合并成一行 mysql  多行合并: mysql 内置函数 group_concat(exper  SEPARATOR " " ) expe ...

最新文章

  1. steam自建服务器游戏_虽有差评销量却还是直步青云,《Atlas》力登Steam榜单前茅...
  2. 【畅谈百度轻应用】云时代·轻应用·大舞台
  3. CCNA考试的一点体会
  4. hdu 2049 不容易系列之(4)——考新郎
  5. POJ 2312 Battle City 优先队列+BFS
  6. 吴裕雄 19-Mysql 连接的使用
  7. CSS3图片跳动效果
  8. django 1.8 官方文档翻译: 2-3-2 关联对象参考
  9. 搭建自己的ngrok服务
  10. jsoup教程_1 简介
  11. 每日一题/005/矩阵/数学归纳法/设A的顺序主子式均不为0.则有下三角矩阵B,使得BA是上三角矩阵,
  12. python获取管理员权限
  13. 最新免费纯净版PE制作工具V2.1【更新说明】
  14. IPython与IPython Notebook安装及使用
  15. ROS只使用思岚A1激光雷达进行slam建图
  16. 概率分布F(x)和概率密度f(x)
  17. LeetCode程序员面试金典(第 6 版)中
  18. 字节跳动技术团队年度 TOP10 技术干货,陪你度过不平凡的 2020
  19. 数据中心网络架构 — 网络带宽的收敛比
  20. [数学/质数筛] 素数筛法

热门文章

  1. 荣耀v10android,荣耀V10跑分多少?荣耀V10性能如何
  2. 2021世界智能网联汽车大会观感
  3. v9连接 android auto,华为荣耀V9有什么接口?有HDMI接口吗?
  4. html代码怎么把竖排转横排,Excel怎么把竖排变成横排 两个方法实现
  5. i5 10600kf配什么主板 i5 10600kf配什么显卡
  6. 行为树(Behavior Tree)实践(2)– 进一步的讨论
  7. 如何将Android手机弄死机?
  8. 镜像即代码:使用 Packer 实现自动化构建镜像
  9. 自由恋爱离婚率高.婚姻就是找匹配,无关形式
  10. linux+锐龙+段错误,锐龙三代BIOS更新出现BUG,不少用户已中招