这段JavaScript代码中的乘法运算符*的作用是什么?
代码逻辑拆解说明
你贴的这段是JavaScript自定义多规则排序的核心逻辑,完整代码如下:
result = sortBy[i].direction*(a[ sortBy[i].prop ] < b[ sortBy[i].prop ] ? -1 : (a[ sortBy[i].prop ] > b[ sortBy[i].prop ] ? 1 : 0));
1. 乘号*的作用
这里的*就是普通算术乘法,核心作用是控制单字段的排序方向:
- 通常
sortBy[i].direction的取值只有1或-1两种- 取
1时,乘以比较结果后符号不变,对应正序(从小到大)排序 - 取
-1时,乘以比较结果后符号反转,对应倒序(从大到小)排序
- 取
2. 括号内三元表达式逻辑
括号里的代码是对两个元素的指定字段做大小比较,返回符合Array.sort()规范的标准比较值:
- 如果
a的指定字段值 <b的指定字段值,返回-1,对应规则为a排在b前面 - 如果
a的指定字段值 >b的指定字段值,返回1,对应规则为b排在a前面 - 如果两个字段值相等,返回
0,对应规则为两者顺序不变
3. 实际运行示例
假设我们要按age字段倒序排序,对应参数为sortBy[i].prop = 'age'、sortBy[i].direction = -1:
- 若a.age = 20,b.age = 30:
括号内比较得20 < 30,返回-1
乘以direction的-1,最终result =1,即b排在a前面,符合倒序要求(30在前,20在后) - 若a.age = 35,b.age = 30:
括号内比较得35 > 30,返回1
乘以direction的-1,最终result =-1,即a排在b前面,符合倒序要求(35在前,30在后)
4. 整体使用场景
这段代码一般嵌套在多字段排序的循环逻辑中:比如要实现「先按年龄倒序,年龄相同再按姓名正序」的需求,就可以把多个排序规则按优先级存入sortBy数组,循环调用这段逻辑比较,直到找到两个元素值不等的字段,返回对应结果作为排序依据。
内容的提问来源于stack exchange,提问作者IdecEddy
相关产品推荐
相关产品推荐

