首页 文章

javascript对象排序不起作用

提问于
浏览
1

我有一个正常工作的排序功能,但后来我尝试添加一个切换位(排序asc / desc),有些东西坏了,我无法弄明白 . 在下面的代码中,sortArray是一个对象数组,sortBy是要排序的对象中的哪个项,sortDir是asc或desc . 因此,例如,如果用户想要按设计者排序,那么itemA和itemB将是a.designer和b.designer,或者我正在使用它[sortBy] b [sortBy] . 如果我设置console.log itemA一旦设置它们看起来很好,它们正是我所期待的 .

但是,如果我将此代码插入:

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

我得到的只是<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;

    }

2 回答

  • 4

    您有语法错误:

    更换

    if (itemA < itemB);
    

    if (itemA < itemB)
    

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

  • 0

    在js中查找数组的.reverse() . 这并不能解决问题,但它可以解决您的需求 .

相关问题