优化下面这段代码const g = this; g.resetBusCategory() g.busCategoryTitle = sort; switch (sort) { case '向上插入': g.busCategoryParams.position = '1'; g.busCategoryParams.currentId = g.curTreeData.businessId; break case '向下插入': g.busCategoryParams.position = '0'; g.busCategoryParams.currentId = g.curTreeData.businessId; break case '编辑': g.busCategoryParams.businessName = g.curTreeData.businessName; // 业务名称 g.busCategoryParams.currentId = g.curTreeData.businessId; // 业务id break } g.editBusCategoryVisible = true;
时间: 2024-03-16 14:47:55 浏览: 20
这段代码可以进行如下优化:
```javascript
const { resetBusCategory, curTreeData } = this;
resetBusCategory();
this.busCategoryTitle = sort;
const { busCategoryParams } = this;
busCategoryParams.currentId = curTreeData.businessId;
switch (sort) {
case '向上插入':
busCategoryParams.position = '1';
break;
case '向下插入':
busCategoryParams.position = '0';
break;
case '编辑':
busCategoryParams.businessName = curTreeData.businessName;
break;
}
this.editBusCategoryVisible = true;
```
这样可以减少代码中重复的 `g.`,同时也避免了在每次使用 `g.` 时都要重复地去查找 `this` 的指向。另外,也可以把在 `switch` 语句中都会用到的 `g.curTreeData.businessId` 提取出来,避免了重复代码。
相关问题
在js中我的这段代码运行时会使页面卡主,我现在找不到原因,你帮我找找有没有其他的排序算法让我的页面卡主的可能性小一点 let list50 = this.queueNameList[this.server50]; let list188 = this.queueNameList[this.server188]; console.log(this.queueSort) switch (this.queueSort) { case 'enqueueDiffAscend' : list50.sort((a, b) => { if (a.enqueueCountDiff < b.enqueueCountDiff) return -1 if (a.enqueueCountDiff > b.enqueueCountDiff) return 1 return 0 }); list188.sort((a, b) => { if (a.enqueueCountDiff < b.enqueueCountDiff) return -1 if (a.enqueueCountDiff > b.enqueueCountDiff) return 1 return 0 }); break; case 'enqueueDiffDescend' : list50.sort((a, b) => { if (a.enqueueCountDiff > b.enqueueCountDiff) return -1 if (a.enqueueCountDiff < b.enqueueCountDiff) return 1 return 0 }); list188.sort((a, b) => { if (a.enqueueCountDiff > b.enqueueCountDiff) return -1 if (a.enqueueCountDiff < b.enqueueCountDiff) return 1 return 0 }); break; case 'nameAscend' : list50.sort((a, b) => a.name.localeCompare(b.name)); list188.sort((a, b) => a.name.localeCompare(b.name)); break; case 'nameDescend' : list50.sort((a, b) => b.name.localeCompare(a.name)); list188.sort((a, b) => b.name.localeCompare(a.name)); break; } this.$set(this.queueNameList[this.server50], list50); this.$set(this.queueNameList[this.server188], list188); this.$forceUpdate(); // 强制更新组件 this.showQueueSort = false;帮我举个例子吧 写成代码
好的,这里是一个使用归并排序的例子,你可以尝试使用它替换掉你原来的排序算法,看看是否能够减少页面卡顿的情况。
```
function mergeSort(arr, compare) {
if (arr.length <= 1) {
return arr;
}
const mid = Math.floor(arr.length / 2);
const left = arr.slice(0, mid);
const right = arr.slice(mid);
return merge(mergeSort(left, compare), mergeSort(right, compare), compare);
}
function merge(left, right, compare) {
let i = 0;
let j = 0;
const result = [];
while (i < left.length && j < right.length) {
if (compare(left[i], right[j]) <= 0) {
result.push(left[i++]);
} else {
result.push(right[j++]);
}
}
return result.concat(i < left.length ? left.slice(i) : right.slice(j));
}
let list50 = this.queueNameList[this.server50];
let list188 = this.queueNameList[this.server188];
console.log(this.queueSort);
switch (this.queueSort) {
case "enqueueDiffAscend":
list50 = mergeSort(list50, (a, b) => {
if (a.enqueueCountDiff < b.enqueueCountDiff) return -1;
if (a.enqueueCountDiff > b.enqueueCountDiff) return 1;
return 0;
});
list188 = mergeSort(list188, (a, b) => {
if (a.enqueueCountDiff < b.enqueueCountDiff) return -1;
if (a.enqueueCountDiff > b.enqueueCountDiff) return 1;
return 0;
});
break;
case "enqueueDiffDescend":
list50 = mergeSort(list50, (a, b) => {
if (a.enqueueCountDiff > b.enqueueCountDiff) return -1;
if (a.enqueueCountDiff < b.enqueueCountDiff) return 1;
return 0;
});
list188 = mergeSort(list188, (a, b) => {
if (a.enqueueCountDiff > b.enqueueCountDiff) return -1;
if (a.enqueueCountDiff < b.enqueueCountDiff) return 1;
return 0;
});
break;
case "nameAscend":
list50 = mergeSort(list50, (a, b) => a.name.localeCompare(b.name));
list188 = mergeSort(list188, (a, b) => a.name.localeCompare(b.name));
break;
case "nameDescend":
list50 = mergeSort(list50, (a, b) => b.name.localeCompare(a.name));
list188 = mergeSort(list188, (a, b) => b.name.localeCompare(a.name));
break;
}
this.$set(this.queueNameList[this.server50], list50);
this.$set(this.queueNameList[this.server188], list188);
this.$forceUpdate(); // 强制更新组件
this.showQueueSort = false;
```
解释一下代码 void ItemDB_Sort(int sort_method, int sort_dir) /* 对数据库中的物品进行排序。 sort_method是排序方法,可以取下列值之一: SORT_BY_NUMBER, SORT_BY_NAME, SORT_BY_QUANTITY sort_dir是排序方向,可以取下列值之一: SORT_ASCENDING, SORT_DESCENDING */ { int (*compare_func)(const void *, const void *); switch(sort_method) { case SORT_BY_NUMBER: if(sort_dir == SORT_ASCENDING) compare_func = CompareByNumber_Ascending; else compare_func = CompareByNumber_Descending; //QuickSort(item_database->number , //num_items , sizeof(int) , //compare_func); break; case SORT_BY_NAME: if(sort_dir == SORT_ASCENDING) compare_func = CompareByName_Ascending; else compare_func = CompareByName_Descending; //QuickSort(item_database->name , //num_items , strlen(item_database->name) , // compare_func); break; case SORT_BY_QUANTITY: if(sort_dir == SORT_ASCENDING) compare_func = CompareByQuantity_Ascending; else compare_func = CompareByQuantity_Descending; //QuickSort(item_database->quantity , //num_items , sizeof(int) , // compare_func); break; default:return; } QuickSort(item_database, num_items,sizeof(struct Item),compare_func); }
这段代码是一个对数据库中的物品进行排序的函数。函数接收两个参数,一个是sort_method,表示排序的方法,可以通过SORT_BY_NUMBER、SORT_BY_NAME和SORT_BY_QUANTITY这三个宏来指定按照编号、名称或数量排序;另一个是sort_dir,表示排序的方向,可以通过SORT_ASCENDING和SORT_DESCENDING这两个宏来指定升序或降序。
函数内部根据sort_method的值选择相应的比较函数compare_func,这些比较函数分别按照不同的排序方式进行比较。然后调用一个QuickSort函数来实现排序,QuickSort函数的参数包括要排序的数据指针、数据个数、每个数据项的大小和比较函数指针。
需要注意的是,这段代码中注释掉的部分是使用标准库函数qsort来实现排序的代码,而现在使用的是一个自定义的快速排序函数QuickSort。