sku无线层级算法/订单sku规格选择JS/

23 篇文章 1 订阅
8 篇文章 0 订阅

订单sku规格选择
参考 https://juejin.cn/post/6914163217124032525

/* 重新实现笛卡尔积 传入的数组 '为空', '长度为1', '长度大于1' 三种情况 分别处理

入参数组格式: [
              { attr:"颜色", valueList:["黑","白"] },
              { attr:"尺寸", valueList:["大","中"] }
          ] 
    返回的数组格式:[
    {"颜色":"黑","尺寸":"大"},
    {"颜色":"黑","尺寸":"中"},
    {"颜色":"白","尺寸":"大"},
    {"颜色":"白","尺寸":"中"}
    ]
   
    */
function generateBaseData(arr) {
    if (arr.length === 0) return []
    if (arr.length === 1) {
        /**
         *  [
              { attr:"颜色", valueList:["黑","白"] },
              { attr:"尺寸", valueList:["大","中"] }
          ] 
         */
        let [item_spec] = arr//arr 是数组
        return item_spec.valueList.map(x => {
            return {
                [item_spec.attr]: x
            }
        })
    }
    if (arr.length >= 1) {
        /**
         * 菜鸟平台 https://www.runoob.com/jsref/jsref-reduce.html
         * total 	必需。初始值, 或者计算结束后的返回值。
            currentValue 	必需。当前元素
            当前函数解释
         * accumulator 第二次处理后的数据
         * spec_item 当前需要处理的数据
         */
        return arr.reduce((accumulator, spec_item) => {
            let acc_value_list = Array.isArray(accumulator.valueList) ? accumulator.valueList : accumulator
            let item_value_list = spec_item.valueList
            let result = []
            console.log(`acc_value_list`, acc_value_list)
            console.log(`item_value_list`, item_value_list)
            for (let i in acc_value_list) {
                for (let j in item_value_list) {
                    let temp_data = {}
                  
                    if (acc_value_list[i].constructor === Object) {
                         // 如果是对象 说明商品·规格还没·组合过
                   /**
                    * [
                    { '颜色': '黑', '尺寸': '大' },
                    { '颜色': '黑', '尺寸': '中' },
                    { '颜色': '白', '尺寸': '大' },
                    { '颜色': '白', '尺寸': '中' }
                    ]
                    */
                        temp_data = {
                            ...acc_value_list[i],
                            [spec_item.attr]: item_value_list[j]
                        }
                        // 否则如果是字符串
                    } else {
                     // 如果不是对象 说明商品·规格还没·组合过一次
                    /**
                     * acc_value_list [ '黑', '白' ] 数据类型是这种的
                        item_value_list [ '大', '中' ]
                     */
                        temp_data[accumulator.attr] = acc_value_list[i]
                        temp_data[spec_item.attr] = item_value_list[j]
                    }
                    result.push(temp_data)
                }
            }
            return result
        })
    }
}

订单sku规格选择

   isDisabledSku(valueId) {
	   if (this.skuValueId.length === 0) {
	    return;
	   }
	   // 判断库存为0的禁止点击,也可以考虑换成淘宝的模式(允许点击,但提示库存为0、确定按钮改成库存不足禁止下一步操作)
	   let isDisabled = false;
	   this.combs.forEach(item => {
	    if (item.skuNum === 0) { 
			//如果sku有为0的就跟当前 valueId对比是否有这个id
			console.log(item.comb.split(','));
	     const itemComb = new Set(item.comb.split(','));
	     if (itemComb.has(valueId + '')) {
	     //有id 就对比当前保存的skuid 跟当为0的对比如果长度一样就返回true 说明有 反之没有
	      const intersect = this.skuValueId.filter(x => itemComb.has(x + ''));
		  console.log(intersect);console.log(itemComb);
	      isDisabled = intersect.length + 1 === itemComb.size;
	     }
	    }
	   });
	   return isDisabled;
	  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值