const sumData = menu.value.map((item) => { let list = item.options.filter((v) => v.isActive); return { type: item.type, list, }; });
时间: 2024-03-05 09:50:17 浏览: 21
您的代码已经非常简洁明了,只有一点点小的建议:可以省略箭头函数的参数的括号,因为 isActive 是一个 Boolean 类型的变量,可以直接作为 filter 方法的参数。改进后的代码如下:
```
const sumData = menu.value.map(item => {
const list = item.options.filter(v => v.isActive);
return {
type: item.type,
list
};
});
```
这样代码更加简洁易读。
相关问题
let sumData = []; menu.value.forEach((item) => { const list = item.options.filter((v) => v.isActive); if (list.length > 0) sumData.push({ type: item.type, list, }); }); 优化
可以使用 Array.prototype.reduce() 方法来优化代码,避免使用额外的变量(如 sumData),同时也可以减少代码行数。具体实现如下:
```
const sumData = menu.value.reduce((acc, item) => {
const list = item.options.filter((v) => v.isActive);
if (list.length > 0) {
acc.push({
type: item.type,
list,
});
}
return acc;
}, []);
```
这里使用了 reduce() 方法,初始值为一个空数组。对于 menu.value 数组中的每个元素,我们都会执行一次回调函数。该回调函数中会对每个元素的 options 数组进行过滤,获得 isActive 为 true 的元素,然后将这些元素和 type 属性一起组成一个对象,最后将该对象 push 进 acc 数组中。最后,reduce() 方法返回的就是 acc 数组。
isShow.value = false; let i = menu.value.find((v) => v.isActive === true).id - 1; const labels=[houseType,orientation,rentStr] params.value[labels[i]] = tagsList.value.find( (v) => v.isActive )?.value; if (i=== 3) { params.value.houseLabels = tagsList.value?.filter(v => v.isActive)?.map(item =>item.value * 1).join(",") } 优化
这段代码可以进行一些优化,例如:
1. 将参数labels定义为常量,避免在每次执行时都重新创建数组。
2. 使用Array.prototype.findIndex()方法查找isActive为true的项的索引,而不是使用find()方法查找后再获取id属性。
3. 使用可选链运算符(?.)代替对tagsList.value.find()方法返回结果的判断。
4. 将条件判断语句中的数字3替换为labels数组的长度减1(labels.length - 1)。
优化后的代码如下:
```
isShow.value = false;
const labels = ['houseType', 'orientation', 'rentStr'];
const activeIndex = menu.value.findIndex((v) => v.isActive === true) - 1;
params.value[labels[activeIndex]] = tagsList.value.find((v) => v.isActive)?.value;
if (activeIndex === labels.length - 1) {
params.value.houseLabels = tagsList.value?.filter(v => v.isActive)?.map(item => item.value * 1).join(",");
}
```