不同的输出两次调用javascript排序功能

时间:2018-11-21 15:53:09

标签: javascript sorting null

我遇到了javascript中的排序问题。我写了一个简单的排序函数,我想在上面放空元素:

这是功能:

List<Object>

让我们以以下数组为例:

var mySort = function(a, b) {
 if (!a && !b) return 0;
 if (!a) return -1;
 if (!b) return -1;
 if (a > b) return 1;
 if (a < b) return -1;
 return 0;
}

通过调用var array = [1, 9, 4, 8, null, 2, 3, 4, null, 6, 3, 2, 8, 9, 5]; ,总是对非null值进行排序,但是null值的位置从数组的开头和结尾开始交替变化:

array.sort(mySort)

为什么?

编辑:
在HMR的评论中,请告诉我算法错误:Odd calls: [null, null, 1, 2, 2, 3, 3, 4, 4, 5, 6, 8, 8, 9, 9] Even calls: [1, 2, 2, 3, 3, 4, 4, 5, 6, 8, 8, 9, 9, null, null] 应该为if (!b) return -1;。现在,它可以很好地处理字符串和数字。

1 个答案:

答案 0 :(得分:1)

您需要使用两个项目之间的关系。如果两个项目均为[HttpPost] public ActionResult AcceptRequest(CoreApiRequest requestObject) { try { if (requestObject == null || requestObject.Text.Length == 0) requestObject = (CoreApiRequest)(new DataContractJsonSerializer(requestObject.GetType())).ReadObject(Request.InputStream); Dictionary<string, string> parameters = new Dictionary<string, string>(); if (requestObject.ApiKey != null && requestObject.ApiKey.Length > 0) { parameters.Add("apiKey", requestObject.ApiKey); } else { parameters.Add("username", requestObject.User); parameters.Add("password", requestObject.Password); } string text = HttpUtility.UrlDecode(requestObject.Text, System.Text.Encoding.UTF8); parameters.Add("text", text); parameters.Add("languageid", requestObject.Language); parameters.Add("ruleset", requestObject.Rule); parameters.Add("grammar", requestObject.Grammar); parameters.Add("spell", requestObject.Spell); parameters.Add("style", requestObject.Style); parameters.Add("requestFormat", requestObject.RequestFormat); if (requestObject.GlobalSessionId != null && requestObject.GlobalSessionId.Length > 0) { parameters.Add("globalSessionId", requestObject.GlobalSessionId); } if (requestObject.IEDomain != null && requestObject.IEDomain.Length > 0) parameters.Add("ieDomain", requestObject.IEDomain); if (requestObject.SessionMetadata != null && requestObject.SessionMetadata.Length > 0) parameters.Add("sessionMetadata", requestObject.SessionMetadata); var model = AcceptCoreManager.GenericRequest(parameters); return Json(model); } catch (Exception e) { var errorModel = new CoreApiException(e.Message, "Accept Request Controller"); return Json(errorModel); } } ,则什么也不要更改,如果您有一个null值,则取决于位置。

最好的方法是检查项目并获取支票的增量以进行排序。

null
function mySort(a, b) {
    return (b === null) - (a === null) || a - b;
}

var array = [1, 9, 4, 8, null, 2, 3, 4, null, 6, 3, 2, 8, 9, 5];

array.sort(mySort);
console.log(array);

array.sort(mySort);
console.log(array);