JavaScript星期数组排序无效问题:如何实现预期排序结果?
解决星期名称数组排序失效的问题
你的代码排序失效的核心问题是:错误地访问了字符串元素的day属性。
数组dayList里的元素是纯字符串(比如'Mon'),并不是包含day字段的对象,所以a.day和b.day的结果都是undefined。当你用map[undefined]时会得到undefined,undefined - undefined等于NaN,而sort函数遇到返回值为NaN的情况时,不会调整元素的顺序,所以数组保持原样。
修改方法很简单,直接用数组元素本身作为映射对象的键即可:
var dayList = ['Mon', 'Fri', 'Sun', 'Wed', 'Sat']; const map = { 'Mon': 1,'Tue': 2,'Wed': 3,'Thu': 4,'Fri': 5,'Sat': 6, 'Sun': 7 }; dayList.sort((a, b) => { return map[a] - map[b]; }); console.log(dayList); // 输出:["Mon", "Wed", "Fri", "Sat", "Sun"]
补充说明:如果你的数组元素是对象类型(比如[{day: 'Mon'}, {day: 'Fri'}, ...]),那原代码中a.day的写法才是正确的,但当前场景下数组是纯字符串集合,直接使用元素本身即可完成映射排序。
内容的提问来源于stack exchange,提问作者HiDayurie Dave
相关产品推荐
相关产品推荐

