【问题标题】:javascript object sorting not workingjavascript对象排序不起作用
【发布时间】:2011-10-12 19:11:59
【问题描述】:

我有一个运行良好的排序功能,但后来我尝试向它添加一个切换位(按 asc/desc 排序),但有些东西坏了,我无法弄清楚。在下面的代码中,sortArray 是一个对象数组,sortBy 是对象中要排序的项,sortDir 是 asc 或 desc。因此,例如,如果用户想按设计师排序,那么 itemA 和 itemB 将是 a.designer 和 b.designer,或者我正在使用它 a[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;

我得到的只是一个

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;

    }

【问题讨论】:

    标签: javascript sorting object


    【解决方案1】:

    你有一个语法错误:

    替换

    if (itemA < itemB);
    

    if (itemA < itemB)
    

    好吧,其实不是语法错误,而是多了一个分号。

    【讨论】:

    • 说我朋友是运行时逻辑错误,是所有错误中最害怕的。它等价于“if(itemA
    【解决方案2】:

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

    【讨论】:

    • 谢谢约瑟夫,是的,我在尝试调试我的hackery时将其剥离出来的完整代码......
    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多