data.list.map((v) => { v.order_goods.map((g) => { g.goods = JSON.parse(g.goods); g.main_banner = app.globalData.imgUrl + g.main_banner; let str = ""; g.spce_name = JSON.parse(g.spce_name); Object.values(g.spce_name).forEach((f) => (str += f + " ")); g.spce_name = str; }); }); 优化这段代码
时间: 2024-02-25 07:53:51 浏览: 21
这段代码可以进一步优化,减少循环和类型判断的次数。可以使用 Array.prototype.forEach() 来代替 map() 方法,因为不需要返回一个新的数组。同时,可以使用解构赋值和默认值来简化代码。
```
data.list.forEach((order) => {
order.order_goods.forEach((goods) => {
const { goods: goodsStr, spce_name: specName, ...rest } = goods;
goods.goods = JSON.parse(goodsStr || "{}");
goods.main_banner = app.globalData.imgUrl + (goods.main_banner || "");
goods.spce_name = Object.values(JSON.parse(specName || "{}")).join(" ");
Object.assign(goods, rest);
});
});
```
这样代码更加简洁明了,同时避免了重复的类型判断和循环。
相关问题
get({ url: "server/OrderServerList", data: query }, ({ data }) => { data.list.map((v) => { v.order_goods.map((g) => { g.goods = JSON.parse(g.goods); g.main_banner = app.globalData.imgUrl + g.main_banner; let str = ""; g.spce_name = JSON.parse(g.spce_name); Object.values(g.spce_name).forEach((f) => (str += f + " ")); g.spce_name = str; }); }); console.log(data.list); this.setData({ list: list.concat(data.list), total: data.count, }); }); 优化这段代码
首先,可以使用 async/await 来异步获取数据,这样代码会更加清晰易读。其次,可以使用 Promise.all() 来并行处理订单列表中的每一个商品,提高处理效率。最后,可以将获取到的数据进行缓存,避免重复请求。
下面是优化后的代码:
```
async function getOrderList(query) {
const { data } = await axios.get("server/OrderServerList", { params: query });
await Promise.all(
data.list.map(async (order) => {
await Promise.all(
order.order_goods.map(async (goods) => {
if (typeof goods.goods === "string") {
goods.goods = JSON.parse(goods.goods);
}
goods.main_banner = app.globalData.imgUrl + goods.main_banner;
let specName = JSON.parse(goods.spce_name);
goods.spce_name = Object.values(specName).join(" ");
})
);
})
);
return data;
}
// 在调用 getOrderList 函数时,可以将获取到的数据进行缓存
let list = [];
let total = 0;
async function fetchOrderList(query) {
const data = await getOrderList(query);
list = list.concat(data.list);
total = data.count;
console.log(list);
return { list, total };
}
fetchOrderList(query).then(({ list, total }) => {
this.setData({ list, total });
});
```
优化这段代码 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` 在数组中出现过的商品标记为不可配送。这样可以减少嵌套循环的层数,提高代码的可读性和执行效率。