Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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中按2个条件对数组排序不起作用_Javascript_Jquery_Arrays_Sorting_Object - Fatal编程技术网

Javascript中按2个条件对数组排序不起作用

Javascript中按2个条件对数组排序不起作用,javascript,jquery,arrays,sorting,object,Javascript,Jquery,Arrays,Sorting,Object,我想按id和名称对对象数组进行排序。首先,它应该按id按升序排序。然后,它应该按名称升序排序 排序函数 <script> $(document).ready(function() { var list = [{ "id": "ts1", "name": "TS1" }, { "id": "ts10", "name": "TS10" }, { "id": "ts11", "name":

我想按id和名称对对象数组进行排序。首先,它应该按id按升序排序。然后,它应该按名称升序排序

排序函数

<script>
  $(document).ready(function() {
    var list = [{
      "id": "ts1",
      "name": "TS1"
    }, {
      "id": "ts10",
      "name": "TS10"
    }, {
      "id": "ts11",
      "name": "TS11"
    }, {
      "id": "ts12",
      "name": "TS12"
    }, {
      "id": "ts13",
      "name": "TS2"
    }, {
      "id": "ts13",
      "name": "TS1"
    }, {
      "id": "ts13",
      "name": "TS3"
    }, {
      "id": "ts14",
      "name": "TS14"
    }, {
      "id": "ts15",
      "name": "TS15"
    }, {
      "id": "ts16",
      "name": "TS16"
    }, {
      "id": "ts17",
      "name": "TS17"
    }, {
      "id": "ts18",
      "name": "TS18"
    }, {
      "id": "ts19",
      "name": "TS19"
    }, {
      "id": "ts2",
      "name": "TS2"
    }, {
      "id": "ts20",
      "name": "TS20"
    }, {
      "id": "ts21",
      "name": "TS21"
    }, {
      "id": "ts22",
      "name": "TS22"
    }, {
      "id": "ts3",
      "name": "TS3"
    }, {
      "id": "ts4",
      "name": "TS4"
    }, {
      "id": "ts5",
      "name": "TS5"
    }, {
      "id": "ts6",
      "name": "TS6"
    }, {
      "id": "ts7",
      "name": "TS7"
    }]

    list.sort(Sort_ID_Name);

    console.log(list);
  });

  function Sort_ID_Name(a, b) {
    try {
      var aID = a.id.toLowerCase();
      var bID = b.id.toLowerCase();
      var aName = a.name.toLowerCase();
      var bName = b.name.toLowerCase();
      return ((aID < bID) ? -1 : ((aID > bID) ? 1 : ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0))));
    } catch (err) {}
  }

</script>
理想状态是这样的

{id: "ts1", name: "TS1"}
{id: "ts2", name: "TS2"}
...
{id: "ts10", name: "TS10"}
{id: "ts11", name: "TS11"}
{id: "ts12", name: "TS12"}
{id: "ts13", name: "TS1"}
{id: "ts13", name: "TS2"}
{id: "ts13", name: "TS3"}
{id: "ts14", name: "TS14"}
{id: "ts15", name: "TS15"}
{id: "ts16", name: "TS16"}
....

该函数仅在列表很短时才起作用,但当列表很长时就不能正常工作。请参见现场演示-

您可以使用自定义排序方法,通过指定
numeric:true
选项,它将智能识别数字

var list=[{“id”:“ts1”,“name”:“ts1”},{“id”:“ts10”,“name”:“ts10”},{“id”:“ts11”,“name”:“ts11”},{“id”:“ts12”,“name”:“TS13”},{“id”:“TS13”,“name”:“ts1”},{“id”:“TS13”,“name”:“ts1”},{“id”:“TS13”,“name”:“TS3”},{“id”:“ts14”},{“id”:“ts15”,“name”:“id”{“ts16”},{,{“id”:“ts17”,“name”:“ts17”},{“id”:“ts18”,“name”:“ts18”},{“id”:“ts19”,“name”:“ts19”},{“id”:“ts2”,“name”:“ts2”},{“id”:“ts20”,“name”:“ts20”},{“id”:“ts21”},{“id”:“ts22”,“name”:“ts22”},{“id”:“ts3”;“name”:“ts3”;“name”:“ts4”;“name”:“ts4”,{“id”:“id”:“ts5”{“tsid”:“ts5”},“名称”:“TS6”},{“id”:“ts7”,“名称”:“ts7”}];
list.sort((a,b)=>a.id.localeCompare(b.id,未定义,{numeric:true})| | a.name.localeCompare(b.name,未定义,{numeric:true}));
console.log(列表);

.as控制台包装{最大高度:100%!重要;顶部:0;}
您正在做的是
>/与当前相比,它应该如何排序?@zfrisch请查看live demo。它应该按照结果列表的顺序排序,首先按ID排序,然后按名称排序。我问这个问题,因为我在演示中不清楚。ID和名称都是相同的?无论是否永久,它都应该用i来概括n您的问题不是外部的。@zfrisch请查看更新的演示,我更新了初始列表。您可以在这里发布更多代码吗?一些对象数组等?在这里发布代码不需要转到其他地方来回答。我知道使用`{numeric:true}的选项“但是我还没有看到也找不到关于未定义部分的文档。你能解释一下这到底是做什么的,或者给我指出正确的方向吗?我知道这很重要,因为这是一个成败攸关的交易,代码才能正常工作。除了@Matt的问题,localeCompare在比较时是否会自动转换成小写?@user8571142它没有。”I don’我不能从大写字母转换为小写字母。谢谢,所以如果我只想比较小写字母,那么我必须将它们设置为小写字母first@HassanImam你能在这里解释一下
undefined
的用法吗?
{id: "ts1", name: "TS1"}
{id: "ts2", name: "TS2"}
...
{id: "ts10", name: "TS10"}
{id: "ts11", name: "TS11"}
{id: "ts12", name: "TS12"}
{id: "ts13", name: "TS1"}
{id: "ts13", name: "TS2"}
{id: "ts13", name: "TS3"}
{id: "ts14", name: "TS14"}
{id: "ts15", name: "TS15"}
{id: "ts16", name: "TS16"}
....
  var aID = a.id.toLowerCase();
  var bID = b.id.toLowerCase();
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase();
  var reg = /\d+/; // matches 1 or more number characters
  var aID = +a.id.match(reg)[0]; // unary + coerces to number
  var bID = +b.id.match(reg)[0];
  var aName = +a.name.match(reg)[0];
  var bName = +b.name.match(reg)[0];