У меня есть такой массив:
[{"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}]
Я хочу отсортировать этот массив на основе значения свойства состояния, как вы можете видеть, что состояние имеет значение null и какое-то числовое значение здесь.
Если состояние! = Ноль, то сортировка в порядке возрастания, а если состояние == ноль, то сортировка в порядке убывания (на основе идентификатора категории)
Таким образом, фактический результат должен выглядеть следующим образом:
[{"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 записи на основе значения состояния в порядке возрастания и других записей на основе значения NULL в порядке убывания на основе идентификатора категории.
Это то, что я пытался ссылаться на эту статью: 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;
});
Любая помощь будет оценена.
Спасибо