【发布时间】:2017-07-14 12:42:16
【问题描述】:
也许我以错误的方式问这个问题,但无法从互联网上弄清楚。
我有一个员工数组,可以按各种值(例如职位、部门)进行排序。
有许多具有相同价值观的员工(例如,许多调酒师或许多从事宾客服务的人)。
因此,我需要将这些子组(所有调酒师或所有宾客服务人员或其他人)按姓氏字母顺序排序(理想情况下,然后是组内具有相同姓氏的人,进一步按名字排序)。
这是我的排序目前的样子:
const sorted = state.employees.sort(function(a, b) {
if (a[filterValue] === b[filterValue]) {
let alphaA = a.lastName, alphaB = b.lastName;
return alphaA < alphaB ? -1 : alphaA > alphaB ? 1 : 0;
}
return a[filterValue] > b[filterValue] ? 1 : -1;
});
但是,返回的数组会混淆,并在每次点击时返回不同的顺序,如下所示:
并且没有实现 asc/desc 逻辑,因此理论上,多次单击应该返回相同的排序数组,而不是按不同顺序返回一个。
这可能是因为按字母顺序比较的不是整个匹配值组(全部在住宿部门),而是直接值,但我不确定这是问题所在,完全不确定如何解决。
感谢您完成任务的帮助,但非常感谢您的解释,因为我显然不完全了解排序的工作原理。
非常感谢!
【问题讨论】:
-
您可能需要澄清您的
filterValue。您是 1) 按类别按字母顺序排序,然后 2) 按名字和姓氏排序吗? -
需要贴出调用排序函数的代码,见How to create a minimal, complete and verifiable example。发布动画 GIF 有点无意义和烦人。
-
嗨,@SeanKwon!是的,所以 filterValue 类似于“部门”或“职位”,应该按字母顺序排序(调酒师,然后是厨师,然后是礼宾)。然后在这种排序中(例如,所有调酒师),这些项目应该按姓氏的字母顺序排序。
-
当我把这段代码放到一个演示中时,它工作得很好。 repl.it/FvpL/0
-
请be-nice,您不是唯一阅读此内容的人。考虑编辑您的评论。
标签: javascript arrays sorting