为何JavaScript的sort函数返回1/-1可排序,返回对象却无效?
JavaScript数组sort回调返回1/-1的作用及常见错误解析
1. 回调中返回1/-1的作用是什么?
Array.sort()的排序逻辑完全由回调函数的返回值决定:
- 返回负数:把第一个参数
a排在第二个参数b的前面 - 返回正数:把
b排在a的前面 - 返回0:保持
a和b的原有顺序
拿你按发明家年份升序的需求举例,课程里的写法大概是这样:
inventors.sort((a, b) => { if (a.year > b.year) { return 1; // a年份更大,让b排前面 } if (a.year < b.year) { return -1; // a年份更小,让a排前面 } return 0; });
本质就是通过返回1/-1来告诉sort方法两个元素的相对位置,最终实现升序排列。其实更简洁的写法是直接返回a.year - b.year,因为当a.year小于b.year时会得到负数,大于时得到正数,和手动返回1/-1的效果完全一致。
2. 返回对象a或b为何无效?
sort的回调函数要求必须返回数字类型的值(正、负整数或0),但如果你直接返回对象a或b,JavaScript会尝试把对象转换成数字,而对象转数字的结果永远是NaN。
sort遇到NaN时无法判断两个元素的相对顺序,自然不会对数组做正确的排序处理,所以你的写法完全起不到排序作用。
内容的提问来源于stack exchange,提问作者bunkgod2
相关产品推荐
相关产品推荐

