首页 > 解决方案 > 排序功能仅在第二次更改事件后激活

问题描述

我有一个函数应该按字母顺序对包含对象的列表进行排序,具体取决于单击的是升序还是降序(带有 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 中激活了一次该函数,以便它按升序排序,因为这是默认值。

标签: javascriptsortingecmascript-6

解决方案


“第一次”尝试很有可能将对象排序为它们当前所在的相同顺序。

您看到您描述的效果的原因是因为在第一次运行期间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)
}

推荐阅读