【发布时间】:2018-11-01 23:07:02
【问题描述】:
我有一个这样的数组:
[{"category_id":101,"category_name":"abc","state":null},
{"category_id":204,"category_name":"test","state":null},
{"category_id":7,"category_name":"pqr","state":"1526985908122"},
{"category_id":103,"category_name":"User","state":null},
{"category_id":2,"category_name":"System","state":null},
{"category_id":205,"category_name":"xyz","state":"1526985908019"},
{"category_id":203,"category_name":"dash","state":null},
{"category_id":4,"category_name":"hello","state":null},
{"category_id":206,"category_name":"demo","state":"1526985908187"},
{"category_id":6,"category_name":"about","state":null},
{"category_id":3,"category_name":"role","state":null}]
我想根据 state 属性的值对这个数组进行排序,就像你在这里看到 state 有 null 和一些数值一样。
如果 state != null 然后按升序排序并且 如果 state == null 然后按降序排序(基于类别 id)
所以实际结果应该是这样的:
[{"category_id":205,"category_name":"xyz","state":"1526985908019"},
{"category_id":7,"category_name":"pqr","state":"1526985908122"},
{"category_id":206,"category_name":"demo","state":"1526985908187"},
{"category_id":204,"category_name":"test","state":null},
{"category_id":203,"category_name":"dash","state":null},
{"category_id":103,"category_name":"User","state":null},
{"category_id":101,"category_name":"abc","state":null},
{"category_id":6,"category_name":"about","state":null},
{"category_id":4,"category_name":"hello","state":null},
{"category_id":3,"category_name":"role","state":null},
{"category_id":2,"category_name":"System","state":null}]
所以它应该根据状态值对前3条记录进行升序排序,其他记录根据空值根据类别id降序排序。
这是我尝试参考这篇文章的内容: https://technology.amis.nl/2007/08/24/how-to-fix-your-number-sorting-problems-in-javascript/
var ALMOST_ZERO = -0.00000001;
records.sort(function(a,b){
console.log(`comparing ${a.state},${b.state}`);
var left = a.state != null ? a.state : ALMOST_ZERO;
var right = b.state != null ? b.state : ALMOST_ZERO;
return right-left;
});
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
是的。更新代码。
-
那么当你尝试排序功能时会发生什么?
-
@JJJ:它按降序对所有内容进行排序
标签: javascript jquery arrays json sorting