javascript排序数组双排序

fre*_*hie 5 javascript

我有一个对象数组MyArrayOfItems,Item其对象看起来像这样:

Item
{
  ContainerID: i, // int
  ContainerName: 'SomeName', // string
  ItemID: j, // int
  ItemName: 'SomeOtherName' // string
}
Run Code Online (Sandbox Code Playgroud)

我想对这个数组进行排序,以便按顺序排序ContainerID,然后按ItemName字母顺序排序.

我有一个自定义排序功能,到目前为止看起来像这样:

function CustomSort(a, b) {

  Item1 = a['ContainerID'];
  Item2 = b['ContainerID'];

  return Item1 - Item2;
}

MyArrayOfItems.sort(CustomSort);
Run Code Online (Sandbox Code Playgroud)

这是按ContainerID排序的,但我如何按ItemName排序?

谢谢.

Shi*_*dim 6

使用String.localeCompare函数.而当使用它ContainerIDab相等.

function CustomSort(a, b) {
  var Item1 = a['ContainerID'];
  var Item2 = b['ContainerID'];
  if(Item1 != Item2){
      return (Item1 - Item2);
  }
  else{
      return (a.ItemName.localeCompare(b.ItemName));
  }
}
Run Code Online (Sandbox Code Playgroud)

要调整排序顺序,您始终可以放在-任何return表达式前面.

  • `Item1 - Item2!= 0`可以简化为`Item1!= Item2`. (2认同)

Raj*_*hal 5

function CustomSort(a, b) {

  Item1 = a['ContainerID'];
  Item2 = b['ContainerID'];
  if(Item1 - Item2 !=0){
      return Item1 - Item2;
  }
  else{
      if (a.ItemName < b.ItemName)
         return -1;
      if (a.ItemName > b.ItemName)
         return 1;
      return 0;
  }
}
Run Code Online (Sandbox Code Playgroud)