javascript - 排序功能仅在第二次更改事件后激活
问题描述
我有一个函数应该按字母顺序对包含对象的列表进行排序,具体取决于单击的是升序还是降序(带有 2 个选项的选择)问题是,当我第一次更改值时,什么也没有发生,它仅在第二个变化。
这是我的代码:
function modulesSorter(a, b) {
let moduleName1 = a.module.toLowerCase();
let moduleName2 = b.module.toLowerCase();
let place = 0
if (value === "descending" || value == null) {
if (moduleName1 > moduleName2) {
place = 1
} else if (moduleName1 < moduleName2) {
place = -1
}
} else if (value === "ascending") {
if (moduleName1 > moduleName2) {
place = -1
} else if (moduleName1 < moduleName2) {
place = 1
}
}
return place;
}
let value
function changeFilter(e) {
e.preventDefault();
renderModules(modules.sort(modulesSorter));
value = document.querySelector('#sortby').value;
console.log(value)
}
我还在 init 中激活了一次该函数,以便它按升序排序,因为这是默认值。
解决方案
“第一次”尝试很有可能将对象排序为它们当前所在的相同顺序。
您看到您描述的效果的原因是因为在第一次运行期间value
是未定义的,直到排序算法运行之后:
function changeFilter(e) {
e.preventDefault();
renderModules(modules.sort(modulesSorter));
value = document.querySelector('#sortby').value;
console.log(value)
}
像这样更改这两个语句的顺序:
function changeFilter(e) {
e.preventDefault();
value = document.querySelector('#sortby').value;
renderModules(modules.sort(modulesSorter));
console.log(value)
}
推荐阅读
- fabricjs - 没有fragmentSource的FabricJS图像过滤器?
- xamarin - 单击“返回”按钮时如何在选项卡之间导航
- c# - 共享相同文本框并返回不同值的 Devexpress 组合框
- batch-file - 如何创建快捷方式或批处理文件来终止进程
- angular - 对象字面量只能指定已知属性,并且在“IndividualSeriesOptions”类型中不存在“标记”
- php - 从 html 表中删除记录,但保留在数据库表中
- ios - UITableView (Swift 4) 中的奇怪缓存问题
- c# - 多次显示和隐藏带有幻灯片动画的 WPF 窗口,同时每次都一致地显示动画
- javascript - 你如何让 Material-UI 选项卡与 react-router 一起工作?
- python - 烧瓶棉花糖 base_fields.Function in base_fields.Nested