商品规格项数据的遍历以及添加

news2024/11/15 3:37:26

简介

今天在处理规格项的数据时遇到了一些问题,接下来就给大家分享一下

 

规格项数据设计

 "specifications": [
            {
                "goodsSpecificationId": 6,
                "goodsSpecificationName": "网络类型",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 12,
                        "goodsSpecificationOptionName": "5G全网通",
                        "goodsSpecificationId": 6
                    },
                    {
                        "goodsSpecificationOptionId": 28,
                        "goodsSpecificationOptionName": "4G全网通",
                        "goodsSpecificationId": 6
                    }
                ]
            },
            {
                "goodsSpecificationId": 7,
                "goodsSpecificationName": "机身颜色",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 13,
                        "goodsSpecificationOptionName": "粉色",
                        "goodsSpecificationId": 7
                    },
                    {
                        "goodsSpecificationOptionId": 14,
                        "goodsSpecificationOptionName": "白色",
                        "goodsSpecificationId": 7
                    },
                    {
                        "goodsSpecificationOptionId": 15,
                        "goodsSpecificationOptionName": "黑色",
                        "goodsSpecificationId": 7
                    },
                    {
                        "goodsSpecificationOptionId": 16,
                        "goodsSpecificationOptionName": "蓝色",
                        "goodsSpecificationId": 7
                    },
                    {
                        "goodsSpecificationOptionId": 17,
                        "goodsSpecificationOptionName": "金色",
                        "goodsSpecificationId": 7
                    },
                    {
                        "goodsSpecificationOptionId": 29,
                        "goodsSpecificationOptionName": "夏日胡杨",
                        "goodsSpecificationId": 7
                    }
                ]
            },
            {
                "goodsSpecificationId": 8,
                "goodsSpecificationName": "屏幕尺寸",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 18,
                        "goodsSpecificationOptionName": "6.1寸",
                        "goodsSpecificationId": 8
                    },
                    {
                        "goodsSpecificationOptionId": 19,
                        "goodsSpecificationOptionName": "6.7寸",
                        "goodsSpecificationId": 8
                    }
                ]
            },
            {
                "goodsSpecificationId": 9,
                "goodsSpecificationName": "存储容量",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 20,
                        "goodsSpecificationOptionName": "128G",
                        "goodsSpecificationId": 9
                    },
                    {
                        "goodsSpecificationOptionId": 21,
                        "goodsSpecificationOptionName": "256G",
                        "goodsSpecificationId": 9
                    },
                    {
                        "goodsSpecificationOptionId": 22,
                        "goodsSpecificationOptionName": "512G",
                        "goodsSpecificationId": 9
                    }
                ]
            },
            {
                "goodsSpecificationId": 10,
                "goodsSpecificationName": "套餐类型",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 23,
                        "goodsSpecificationOptionName": "官方标配",
                        "goodsSpecificationId": 10
                    },
                    {
                        "goodsSpecificationOptionId": 24,
                        "goodsSpecificationOptionName": "套餐一",
                        "goodsSpecificationId": 10
                    },
                    {
                        "goodsSpecificationOptionId": 25,
                        "goodsSpecificationOptionName": "套餐二",
                        "goodsSpecificationId": 10
                    },
                    {
                        "goodsSpecificationOptionId": 26,
                        "goodsSpecificationOptionName": "套餐三",
                        "goodsSpecificationId": 10
                    }
                ]
            },
            {
                "goodsSpecificationId": 12,
                "goodsSpecificationName": "运行内存",
                "goodsTypeId": 24,
                "goodsSpecificationOptions": [
                    {
                        "goodsSpecificationOptionId": 30,
                        "goodsSpecificationOptionName": "4G",
                        "goodsSpecificationId": 12
                    },
                    {
                        "goodsSpecificationOptionId": 32,
                        "goodsSpecificationOptionName": "8G",
                        "goodsSpecificationId": 12
                    },
                    {
                        "goodsSpecificationOptionId": 33,
                        "goodsSpecificationOptionName": "12G",
                        "goodsSpecificationId": 12
                    }
                ]
            }
        ]
    }

问题的出现

由于是使用一个遍历,将所有规格的数据遍历后在进行一个选中事件的处理,那么最难的部分当属于这个事件处理这块了,如何去辨别此数据是否是已选数据,同一个规格的数据等等以及如何去处理这些数据

下面是视图层的遍历

<div class="goodsDesc_select">
              <div v-for="item in goodsDesc.specifications" :key="item" class="goodsDesc_select_box">
                <div class="goodsDesc_select_name">{{ item.goodsSpecificationName }}&nbsp;:</div>
                <div>
                  <ul style="display: flex;flex-wrap: wrap">
                    <el-button
                        v-for="type in item.goodsSpecificationOptions" :key="type.goodsSpecificationOptionId"
                        :class="{ actived_select: type.selected}"
                        @click="changeSelectedStatus(item,type)"
                    >{{ type.goodsSpecificationOptionName }}
                    </el-button>
                  </ul>
                </div>
              </div>
            </div>

解决逻辑

算法不太好,所写的有点无脑

/**
 * 规格选择事件
 */
const changeSelectedStatus = (item, typeProxy) => {
  //判断并设置高亮
  if (typeProxy.selected) {
    typeProxy.selected = false
  } else {
    item.goodsSpecificationOptions.forEach(typeProxy => typeProxy.selected = false)
    typeProxy.selected = true
  }
  //把Proxy数据转换为js数据
  const type = JSON.parse(JSON.stringify(typeProxy))
  //添加所选的规格数据
  if (specificationOptions.length == 0) {
    specificationOptions.push(type)
  } else {
    specificationOptions.forEach((e) => {
      //如果父id相同则更改名字
      if (e.goodsSpecificationId == type.goodsSpecificationId) {
        e.goodsSpecificationOptionName = type.goodsSpecificationOptionName
      } else {
        //否则添加,这里会引发重复添加问题
        specificationOptions.push(type)
      }
    })
  }
  //去重复后的数组
  const uniqueArray = specificationOptions.reduce((accumulator, currentValue) => {
    if (!accumulator.includes(currentValue)) {
      accumulator.push(currentValue);
    }
    return accumulator;
  }, []);
  //清空specificationOptions
  specificationOptions.splice(0, specificationOptions.length)
  //复制数组
  for (let i = 0; i < uniqueArray.length; i++) {
    specificationOptions.push(uniqueArray[i])
  }
  console.log(specificationOptions)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Acwing166】数独(dfs+剪枝+位运算)

本题思路来源于acwing算法提高课 题目描述 看本文需要准备的知识 1.dfs算法基本思想 2.位运算基础 3.对剪枝这个名词的大概了解 剪枝优化位运算优化 常见四种剪枝策略 首先考虑这道题的搜索顺序&#xff0c;很明显&#xff0c;可以随意选择一个空格子&#xff0c;分支为这…

《广西开放大学电大搜题微信公众号——探索学习的新途径》

随着社会的发展&#xff0c;教育无疑成为了人们的基本需求之一。然而&#xff0c;对于许多忙碌的职场人士来说&#xff0c;时间和地点的限制使得他们无法像传统学生那样参加常规的大学教育。好在有着广西开放大学这样的学府&#xff0c;为那些繁忙而渴望知识更新的人们提供了学…

好消息,终于可以获取到支付宝【支付交易投诉】的信息了。。。

大家好&#xff0c;我是小悟 若我拿出这个系统&#xff0c;阁下又该如何应对。 1、问题背景 之前以为从账单详情页中点击【投诉】 > 【举报中心】的投诉信息获取不到&#xff0c;经过不断尝试&#xff0c;终于能获取到了。 【支付宝支付交易投诉】&#xff0c;投诉入口是…

​​​​​​​2022年上半年 软件设计师 上午试卷(1-32)

以下关于冯诺依曼计算机的叙述中&#xff0c;不正确的是 &#xff08;1&#xff09; 。 &#xff08;1&#xff09; A. 程序指令和数据都采用二进制表示 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速缓存中 C. 程序的功能都由中央处理器&#xff08;CPU&…

深入解析docker内核网桥

今天做虚拟桌面&#xff0c;朋友问我&#xff0c;为什么vnc 连接另一个docker 容器一直超时&#xff0c;原因是在docker 启动的时候没有组网&#xff0c;那么接下来我就要解析下docker的内核网络。 我们思考几个问题&#xff0c;带你了解linux 中docker 网络实现的基本原理。 文…

家庭燃气表微信抄表识别系统

1.背景需求 目前家里燃气度数的读数上报&#xff0c;每个月在社区微信群里面将手机拍摄的燃气表读数截图&#xff08;加住址信息水印&#xff09;&#xff0c;发到群里给抄表员。 2.总体设计 设计目标 功能一&#xff1a;手机上随时可以远程采集读数图片&#xff08;自动加住…

Jenkins环境部署与任务构建

一、CI/CD 1、CI/CD 概念&#xff1a; CI/CD 是一种软件开发和交付方法&#xff0c;旨在加速应用程序的开发、测试和部署过程&#xff0c;以提高软件交付的质量和效率。 (1) 持续集成 (CI Continuous Integration): 持续集成是开发团队频繁集成其代码更改的过程。开发者将其…

2023Jenkins连接k8s

首先配置k8s config文件 1.方式获取k8s密钥 cat .kube/config 2.导出方式或者密钥 kubectl config view --raw > k8s-config-admin pipeline {agent {kubernetes {yaml apiVersion: v1kind: Podmetadata:labels:some-label: devopsspec:containers:- name: dockerimage: d…

SpringBoot 第一个接口编写

RestController //表示该类为请求处理类public class HttpDeal {RequestMapping("/login")//这个方法处理哪一个地址过来的请求public String hello(){return "返回给浏览器";}}

【网络协议】聊聊网关 NAT机制

再宿舍的时候&#xff0c;其实只能通过局域网进行处理&#xff0c;但是如果接入互联网&#xff0c;一般是配置路由器当然还有网关。 MAC头和IP头的细节 一旦配置了IP地址和网关&#xff0c;就可以制定目标地址进行访问。 MAC头主要信息目标和源MAC地址&#xff0c;以及协议类…

二、BurpSuite Intruder暴力破解

一、介绍 解释&#xff1a; Burp Suite Intruder是一款功能强大的网络安全测试工具&#xff0c;它用于执行暴力破解攻击。它是Burp Suite套件的一部分&#xff0c;具有高度可定制的功能&#xff0c;能够自动化和批量化执行各种攻击&#xff0c;如密码破解、参数枚举和身份验证…

031-第三代软件开发-屏幕保护

第三代软件开发-屏幕保护 文章目录 第三代软件开发-屏幕保护项目介绍屏幕保护 关键字&#xff1a; Qt、 Qml、 MediaPlayer、 VideoOutput、 function 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#…

SIEMENS S7-1200 汽车转弯灯程序 编程与分析

公告 项目地址:https://github.com/MartinxMax/SIEMENS-1200-car_turn_signal 分析 题目: 画IO分配表 输入输出m3.0左转弯开关q0.0左闪灯m3.1右转弯开关q0.1右闪灯m3.2停止开关 博图V16配置 设置PLC的IP地址 允许远程通信访问 将HMI设备拖入 注意,我们这边选择的是HMI连接…

Leetcode——二维数组及滚动数组练习

118. 杨辉三角 class Solution { public:vector<vector<int>> generate(int numRows) {// 定义二维数组vector<vector<int>> num(numRows);for(int i0;i<numRows;i){//这里是给内层vector定义大小。默认是0,这里n是个数&#xff0c;不是值num[i].re…

【Java基础面试四十二】、 static修饰的类能不能被继承?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; static修饰的类能不能被…

物联网AI MicroPython传感器学习 之 RTC时钟模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 DS1302 是DALLAS 公司推出的涓流充电时钟芯片&#xff0c;内含有一个实时时钟/日历和31字节静态RAM&#xff0c;实时时钟/日历电路提供秒、分、时、日、周、月、年的信息&#xff0c;每月的天数…

驱动开发2 CoetexA7核 字符设备驱动(LED亮灯)(单独映射寄存器实现+封装结构体映射实现)

一、单独映射寄存器实现 可参考arm点灯C语言 cortex-A7核 点LED灯 &#xff08;附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】&#xff09;-CSDN博客 1 应用程序 test.c #include <stdio.h> #include <sys/types.h> #include <sys/s…

云服务器搭建Hadoop分布式

文章目录 1.服务器配置2.Java环境3. 安装Hadoop4. 集群配置5. 编写集群的启动脚本 1.服务器配置 服务器主机名配置115.157.197.82s110核115.157.197.84s210核115.157.197.109s310核115.157.197.31s410核115.157.197.60gracal10核 所有的软件安装在/opt/module下&#xff0c;软…

python生成的报告中绘制了多张图,但最后都混合到一起了

问题来源&#xff1a; 用python生成的报告中&#xff0c;存在三张图&#xff0c;第一个张图是正常的&#xff0c; 后面的图都是不正常的&#xff0c;全都是多张图混合而成的&#xff0c;这是为什么呢&#xff1f; 三段代码均是下述调用方式 import matplotlib.pyplot as plt pl…

biquad滤波器的设计

1.介绍 Biquad滤波器是一种常用的数字滤波器结构&#xff0c;它使用二阶差分方程&#xff08;difference equation&#xff09;来实现滤波功能。它得名于其包含两个极点&#xff08;poles&#xff09;和一个零点&#xff08;zero&#xff09;。 双二阶滤波器(biquad)是最常用…