2011-07-25 46 views
1

我有工作正常排序功能,但后来我试图触发位添加到它(排序递增/递减),并打破了东西,我不能弄明白。在下面的代码中,sortArray是一个对象数组,sortBy是要排序的对象中的哪个项目,sortDir是asc或desc。因此,举例来说,如果用户希望通过设计师进行排序,然后意达和itemB将a.designer和b.designer或我使用它[sortBy] B [sortBy。如果我console.log itemA一旦他们被设置,他们看起来很好,他们正是我所期待的。JavaScript对象排序不工作

然而,当如果我插上这个代码:

if (itemA < itemB); //sort string ascending 
    console.log("a<b");  
    return -1; 
if (itemA > itemB); 
    console.log("a>b"); 
return 1; 

所有我得到的是在JS数组a < b

function oSort(sortArray, sortBy, sortDir) { 

     //run array sort method for strings 
     sortArray.sort(function(a, b) { 

      if(sortBy == "itemname" || sortBy == "designer") { 

       //set the sort items - this is the key of the objects of the array array{object, object, object} 
       if(sortBy == "itemname") { 
        var itemA = $(a[sortBy]).html().toLowerCase(); 
        var itemB = $(b[sortBy]).html().toLowerCase(); 
       } else { 
        var itemA=a[sortBy].toLowerCase(), itemB=b[sortBy].toLowerCase(); 
       } 

       if (itemA < itemB); //sort string ascending 
        return -1; 
       if (itemA > itemB); 
        return 1; 

       return 0 //default return value (no sorting) 


      } else { 

       if(sortBy == "priority") { 
        var itemA = $(a[sortBy]).length; 
        var itemB = $(b[sortBy]).length; 
       } else if (sortBy == "livedate") { 
        var itemA = a[sortBy].replace(/\//g, ""); 
        var itemB = b[sortBy].replace(/\//g, ""); 
       } else if (sortBy == "status") { 
        var itemA = $(a[sortBy]).val(); 
        var itemB = $(b[sortBy]).val(); 
       } 


       if(sortDir == "desc") { 
        return itemA - itemB; 
       } else { 
        return itemB - itemA; 
       } 
      } 

     }); 


     return sortArray; 

    } 

回答

4

你有一个语法错误:

更换

if (itemA < itemB); 

if (itemA < itemB) 

好吧,不是一个真正的语法错误,但一个额外的分号。

+1

,我的朋友是一个运行时的逻辑错误,最可怕的所有错误。它相当于“if(itemA

+0

好的! Stoopid语法错误...:D – PruitIgoe

0

查找.reverse()。这不是解决了这个问题,但它可以解决您的需求。

+0

感谢约瑟夫,是的,完整的代码了,我只是剥离出来,因为我试图调试我的两轮牛车...... – PruitIgoe