我有一个具有难度属性的对象数组,我希望能够按“最容易”到“最难”对列表进行排序,其中可能的值为“最容易”、“容易”、“中等”、“难”和“最难”。要按标题的字母顺序排序,我只需执行以下操作:
items.sort((a, b) => ((b.title > a.title) ? 1 : -1));
但这并不能为“最容易到最难”提供理想的结果。有没有一种有效的方法可以做到这一点?
zazmityj1#
我建议您使用从字符串到int的Map:
const sortMap = { 'easiest': 0, 'easy': 1, 'medium': 2, 'hard': 3, 'hardest': 4, } // and then sort with it items.sort((a, b) => (sortMap[b.difficulty] - sortMap[a.difficulty]);
这可能比使用 indexOf ,但这很容易出错,因为必须小心地将值指定给map对象中的键
indexOf
juud5qan2#
将所有可能的标题放在一个数组中,并按它们在数组中的索引排序。
const levels = ['easiest', 'easy', 'medium', 'hard', 'hardest']; items.sort((a, b) => levels.indexOf(b.difficulty) - levels.indexOf(a.difficulty));
2条答案
按热度按时间zazmityj1#
我建议您使用从字符串到int的Map:
这可能比使用
indexOf
,但这很容易出错,因为必须小心地将值指定给map对象中的键juud5qan2#
将所有可能的标题放在一个数组中,并按它们在数组中的索引排序。