Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对以键为数字的对象数组进行排序_Javascript_Jquery_Angularjs - Fatal编程技术网

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
as
0
会有帮助。好的。。我在那里给出的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;