Javascript:按三个值对对象数组进行排序

Javascript:按三个值对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个要使用.sort()函数排序的对象数组。应按三个值进行排序(首先按第一个值排序,然后按第二个值排序,最后按第三个值排序)。 我试过下面的方法,但似乎不能正常工作 myArray.sort(function(a,b) { if (a.Value1 === b.Value1) { if (a.Value2 === b.Value2) { return (a.Value3 < b.Value3) ? -1 : (a.Value3 &g

我有一个要使用.sort()函数排序的对象数组。应按三个值进行排序(首先按第一个值排序,然后按第二个值排序,最后按第三个值排序)。 我试过下面的方法,但似乎不能正常工作

myArray.sort(function(a,b) {
     if (a.Value1 === b.Value1) {
         if (a.Value2 === b.Value2) {
             return (a.Value3 < b.Value3) ? -1 : (a.Value3 > b.Value3) ? 1 : 0;
         } else {
             return (a.Value2 < b.Value2) ? -1 : 1;
         }
     } else {
         if (a.Value2 === b.Value2) {
             return(a.Value1 < b.Value1) ? -1 : 1;
         } else {
             return (a.Value2 < b.Value2) ? -1 : 1;
         }
     }
 });
myArray.sort(函数(a,b){
如果(a.Value1==b.Value1){
如果(a.Value2==b.Value2){
返回值(a.Value3b.Value3)?1:0;
}否则{
返回值(a.Value2

任何帮助都将不胜感激。

这基本上是好的,但在一个小案例中,您把逻辑搞乱了,
a.Value1!==b、 值1

这里有一个固定版本:

myArray.sort(function(a,b) {
     if (a.Value1 === b.Value1) {
         if (a.Value2 === b.Value2) {
             return (a.Value3 < b.Value3) ? -1 : (a.Value3 > b.Value3) ? 1 : 0;
         } else {
             return (a.Value2 < b.Value2) ? -1 : 1;
         }
     } else {
          return (a.Value1 < b.Value1) ? -1 : 1;
     }
});
myArray.sort(函数(a,b){
如果(a.Value1==b.Value1){
如果(a.Value2==b.Value2){
返回值(a.Value3b.Value3)?1:0;
}否则{
返回值(a.Value2

myArray.sort(函数(a,b){
函数getResult(第一,第二){
返回(第一次<第二次)?-1:(第一次>第二次)?1:0;
}
如果(a.Value1!==b.Value1)返回getResult(a.Value1,b.Value1);
如果(a.Value2!==b.Value2)返回getResult(a.Value2,b.Value2);
返回getResult(a.Value3,b.Value3);
});

为什么这么复杂?试试这个:

myArray.sort(function(a,b) {
    if(a.Value1 !== b.Value1) return (a.Value1 < b.Value1) ? -1 : 1;
    if(a.Value2 !== b.Value2) return (a.Value2 < b.Value2) ? -1 : 1;
    return (a.Value3 < b.Value3) ? -1 : 1;
    });
myArray.sort(函数(a,b){
如果(a.Value1!==b.Value1)返回(a.Value1
对我来说,这更有效、更可读。另一方面,它适用于任意数量的字段

      List.sort(function (a, b) {
          var keyA = a.Field1;
          var keyB = b.Field1;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          keyA = a.Field2;
          keyB = b.Field2;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          keyA = a.Field3;
          keyB = b.Field3;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          //You can repeat this for any number of fields

          return 0;
      });
List.sort(函数(a,b){
var-keyA=a.Field1;
var-keyB=b.Field1;
如果(keyA>keyB)返回-1;
if(keyAkeyB)返回-1;
if(keyAkeyB)返回-1;
if(keyA
为什么要在
else
语句中检查
Value2
<如果
Value1
已经不同,则code>Value2
不会影响订单。
      List.sort(function (a, b) {
          var keyA = a.Field1;
          var keyB = b.Field1;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          keyA = a.Field2;
          keyB = b.Field2;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          keyA = a.Field3;
          keyB = b.Field3;

          if (keyA > keyB) return -1;
          if (keyA < keyB) return 1;

          //You can repeat this for any number of fields

          return 0;
      });