优化代码this.legendArr=[] this.index=0 res.datas.forEach(item=>{ this.index++; let {data,name,hbData}=item; var obj={}; obj.name='' obj.data='' obj.hbData='' this.legendArr.push(obj) if(name=="vapour"){ this.legendArr[0].name = '蒸汽'; } if(name=="electric"){ this.legendArr[1].name = '电力'; } if(name=="gas"){ this.legendArr[2].name = '天然气'; } if(name=="drain_water"){ this.legendArr[3].name = '排水'; } if(name=="water"){ this.legendArr[4].name = '用水'; } this.legendArr[Number(this.index-1)].data = item.data; this.legendArr[Number(this.index-1)].hbData = item.hbData; })
时间: 2023-05-21 19:05:44 浏览: 72
可以使用数组的 map 方法来优化这段代码:
this.legendArr = res.datas.map(item => {
let obj = {};
obj.name = '';
obj.data = item.data;
obj.hbData = item.hbData;
switch (item.name) {
case 'vapour':
obj.name = '蒸汽';
break;
case 'electric':
obj.name = '电力';
break;
case 'gas':
obj.name = '天然气';
break;
case 'drain_water':
obj.name = '排水';
break;
case 'water':
obj.name = '用水';
break;
}
return obj;
});
这里使用了 ES6 中的箭头函数和对象字面量的简写,让代码更加简洁易读。
相关问题
优化这段代码 let findNoAreasData = []; console.log('findNoAreas res', res); res.datas.data.forEach(x => { // 存在限购地区 if (x.no_areas.length > 0) { x.no_areas.filter(y => { if (y.province_id == this.addrCode.province) { this.goodsDatas.filter(z => { if (z.goods_sku.third_sku_id == y.sku_id) { z.goods_sku.notDelivery = true; if (z.goods_sku.notDelivery) { this.no_areas = true; } } }) } }) } });
这段代码可以优化如下:
```
let noAreasSkuIds = res.datas.data
.filter(x => x.no_areas.some(y => y.province_id == this.addrCode.province))
.map(x => x.no_areas.filter(y => y.province_id == this.addrCode.province))
.flat()
.map(y => y.sku_id);
if (noAreasSkuIds.length > 0) {
this.goodsDatas.forEach(z => {
if (noAreasSkuIds.includes(z.goods_sku.third_sku_id)) {
z.goods_sku.notDelivery = true;
this.no_areas = true;
}
});
}
```
这段代码首先使用 `filter` 函数筛选出限购地区中包含当前省份的数据,并使用 `map` 函数提取出对应的 `sku_id` 数组。然后判断该数组是否为空,如果不为空则遍历商品数据,将 `sku_id` 在数组中出现过的商品标记为不可配送。这样可以减少嵌套循环的层数,提高代码的可读性和执行效率。
handleNodeClick(data) { if (this.type == "information") { if (!data.son.length) { if (data.code) { this.$emit("getDimension", data, true); getEchaersSate(data, this.localCompany.com_id).then((res) => { this.$emit("getEchartsData", res.data.data, false); }); } else { console.log("code为空"); this.$message({ type: "error", message: "该维度暂无数据,请选择其他维度对比", }); } } else { console.log("无数据"); } } else if (this.type == "theme") { if (!data.son.length) { if (data.code) { this.$emit("getDimension", data, true); let parameter = { company: [], expression: [], }; // 请求参数数据处理 this.ipcParameter.forEach((item) => { if (item.ipc.length == 0) { console.log("无ipc"); } else { parameter.company.push(item.name); let datas = `pat_int_cl =(` + item.ipc[0].code + `)`; item.ipc.forEach((ele, index) => { if (index > 0) { datas = datas + ` or pat_int_cl =(` + ele.code + `)`; } }); let expressions = `( ` + datas + ` )`; parameter.expression.push(expressions); } });
根据你提供的代码,`handleNodeClick`方法中并没有取消事件的默认行为或阻止事件传播的代码,所以这个问题应该与事件处理无关。如果`disabled`属性仍然无法生效,可能是因为其他代码正在影响它的行为。
下面是一些可能的问题和解决方案:
1. 确保你没有在父组件中使用了`v-if`或`v-show`等指令来控制`el-tree`的显示。如果你这样做了,并且条件不满足,则整个`el-tree`会被移除,`disabled`属性也将失效。
2. 确保你没有在`el-tree`的父元素或祖先元素上设置了`pointer-events:none`等CSS属性。这些属性会禁用鼠标事件,导致`disabled`属性无法生效。
3. 请检查`el-tree`的父元素或祖先元素是否存在其他的鼠标事件、键盘事件或touch事件等,这些事件可能会干扰`el-tree`的默认事件。
如果以上解决方案都无法解决您的问题,建议您提供更多关于您的代码和问题的信息,这样我可以更好地帮助您调试。