Javascript 对以键为数字的对象数组进行排序
我有以下对象数组:Javascript 对以键为数字的对象数组进行排序,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我有以下对象数组: [ { html: "<span class="email">", startOffset: "109" type: "Email" }, { html: "<span class="email">", endOffset: "139" type: "Email" }, { html: "&l
[
{
html: "<span class="email">",
startOffset: "109"
type: "Email"
},
{
html: "<span class="email">",
endOffset: "139"
type: "Email"
},
{
html: "<span class="email">",
startOffset: "149"
type: "Email"
},
{
html: "<span class="email">",
startOffset: "155"
type: "Email"
},
{
html: "<span class="email">",
endOffset: "160"
type: "Email"
},
{
html: "<span class="email">",
startOffset: "0"
type: "Email"
},
{
html: "<span class="email">",
endOffset: "15"
type: "Email"
},
]
现在,这里是排序,但当起始偏移量为0时,则排序方式不正确。那么,有人能告诉我哪里出了问题吗?我不确定我是否理解你的问题。 这对我很有用:
var newJSON = [{
html: "<span class=\"email\">",
startOffset: "109",
type: "email"
},
{
html: "<span class=\"email\">",
endOffset: "139",
type: "email"
},
{
html: "<span class=\"email\">",
startOffset: "149",
type: "email"
},
{
html: "<span class=\"email\">",
startOffset: "155",
type: "email"
},
{
html: "<span class=\"email\">",
endOffset: "160",
type: "email"
},
{
html: "<span class=\"email\">",
startOffset: "0",
type: "email"
},
{
html: "<span class=\"email\">",
endOffset: "15",
type: "email"
},
]
console.log(newJSON.map(i => i.startOffset || i.endOffset))
newJSON.sort(function(a, b) {
var aVal = a.startOffset != undefined ? parseInt(a.startOffset) : parseInt(a.endOffset);
var bVal = b.startOffset != undefined ? parseInt(b.startOffset) : parseInt(b.endOffset);
return aVal - bVal;
});
console.log(newJSON.map(i => i.startOffset || i.endOffset))
问候,,
Vincent检查空值或未定义的值:
function isNullOrUndefined(k){
return typeof(k) === 'undefined' || k === null;
}
var aVal = isNullOrUndefined(a.startOffset) ? a.startOffset : a.endOffset;
var bVal = isNullOrUndefined(b.startOffset) ? b.startOffset : b.endOffset;
你对声明数组的那段肮脏的、不可读的代码有什么看法?是的,我会更改它。对不起that@MedetTleukabilulyplease好吧,我想这可能就是问题所在。那么有什么解决方案吗?假设始终定义了a,并且缺少属性startOffset,则可以编写:a.startOffset!==未定义?a、 问题是我真的不明白你的需要。你想按哪个字段排序?startOffset或endOffset?这两个字段。如果我在bval上使用此项,那么它对我来说工作正常。使用此项后,它没有按照正确的顺序进行排序。与以前一样。您能否提供失败的值/场景?转换为正确的数字
a.endOffset
as0
会有帮助。好的。。我在那里给出的json有一个startOffset的值0,它失败了。我在chrome上测试过。。startOffset='0'在排序数组中首先出现。这不是必须的结果吗?
["109", "139", "149", "155", "160", "0", "15"]
["0", "15", "109", "139", "149", "155", "160"]
function isNullOrUndefined(k){
return typeof(k) === 'undefined' || k === null;
}
var aVal = isNullOrUndefined(a.startOffset) ? a.startOffset : a.endOffset;
var bVal = isNullOrUndefined(b.startOffset) ? b.startOffset : b.endOffset;