javascript - 按两个字段排序,但第二个字段取决于 PHP 中的条件
问题描述
我有一个带有“商店”的数组,每个都有一个距离属性(与用户的距离)和一个“特色”属性(这个值越高,它们应该出现的越高)。
所以,现在我正在这样做:
var sorted = arr.sort(function(a,b){
return b.featured - a.featured || a.distance - b.distance;
});
首先按特征排序,然后按距离排序。
但是,如果距离太远(例如,超过 10 公里),即使结果具有特色,也与用户无关。
所以,我需要首先对它们的“特色”属性进行排序,但前提是它们的距离属性小于 10。
我在想这个:
按距离对它们进行排序,将接近 10 公里的放在一个数组中,将其他的放在另一个数组中。
按其特征属性对第一个数组中的元素进行排序。
加入两个数组。
但也许有更简单或更短的方法来做到这一点。
样本输入:
d: 19 | f: 2
d: 2 | f: 8
d: 3 | f: 5
d: 21 | f: 4
d: 6 | f: 0
d: 12 | f: 5
d: 1 | f: 5
d: 8 | f: 4
d: 5 | f: 0
d: 13 | f: 5
d: 11 | f: 2
d: 7 | f: 1
d: 9 | f: 10
样本输出:
d: 9 | f: 10
d: 2 | f: 8
d: 1 | f: 5
d: 3 | f: 5
d: 8 | f: 4
d: 7 | f: 1
d: 5 | f: 0
d: 6 | f: 0
d: 11 | f: 2
d: 12 | f: 5
d: 13 | f: 5
d: 19 | f: 2
d: 21 | f: 4
如您所见,对于距离小于 10 的,它按特征值对其进行排序,但对于距离大于 10 的,它按距离对其进行排序。
解决方案
如果我理解您的问题,您可以添加一个返回当前返回内容的条件,如果不满足该条件,则仅返回其中的距离部分:
var sorted = arr.sort(function(a,b){
if (a.distance < 10000 || b.distance < 10000)
return b.featured - a.featured || a.distance - b.distance;
return a.distance - b.distance;
});
推荐阅读
- java - 程序流程问题
- spring-webflux - 如果在 Project Reactor 中使用 publishOn,订阅不会打印出任何日志
- xml - Xsl-transformation with grouping,获取祖先属性值
- python - python selenium bs4,不是从 https url 而是从带有服务器目录的 src 下载图像
- matlab - 如何在 Matlab 中从高斯 Copula 生成条件分布?
- python - “manage.py startapp”不创建 db.sqlite3
- matlab - 为什么 Matlab 阶乘函数将整数视为非整数?
- r - Rfast hd.eigen() 返回 NA,但基本 eigen() 不返回
- pentaho - Pentaho / PDI:如果加载作业(在元作业内)失败,则自动将值增加一
- python-3.x - 为什么我不能将布尔运算符分配给变量?