我遇到了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;
。现在,它可以很好地处理字符串和数字。
答案 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);