6

我有一个对象数组MyArrayOfItemsItem其对象如下所示:

Item
{
  ContainerID: i, // int
  ContainerName: 'SomeName', // string
  ItemID: j, // int
  ItemName: 'SomeOtherName' // string
}

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

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

function CustomSort(a, b) {

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

  return Item1 - Item2;
}

MyArrayOfItems.sort(CustomSort);

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

谢谢。

4

2 回答 2

6

使用String.localeCompare函数。ContainerID当和相等时使用它ab

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));
  }
}

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

于 2012-05-01T20:25:45.047 回答
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;
  }
}
于 2012-05-01T20:28:06.680 回答