jscript:错误的排序行为?

时间:2014-06-25 20:13:59

标签: arrays string sorting object jscript

我试图按照“' st”中的值对多级对象进行排序。每个元素的属性:

var     aMyArr = [
        {
            "st" : "ISMTP"
        }, , {
            "st" : "IFTP"
        }, {
            "st" : "I"
        }
    ];


for (i in aMyArr){
    WScript.Echo(aMyArr[i].st);
}

aMyArr.sort(sortBySt);


for (i in aMyArr){
    WScript.Echo(aMyArr[i].st);
}


function sortBySt(param1, param2){
    var ret = 0;
    if (param1.st.toLowerCase() > param2.st.toLowerCase())
        ret = 1;

    if (param1.st.toLowerCase() < param2.st.toLowerCase())
        ret = -1;

    WScript.Echo(param1.st+" > "+param2.st+" ==> "+ret);
    return ret
}

当然aMyArr的真实结构要复杂得多,这个问题就简化了。

输出非常意外:

ISMTP  // before sorting
IFTP
I

IFTP > I ==> 1
IFTP > ISMTP ==> -1
IFTP > I ==> 1

I      // after sorting
ISMTP
IFTP

虽然我期望按字母顺序排列。据我所知,可能会发生这种情况,因为aMyArr不是纯数组而是对象,但这并不能解释两个IFTP > I比较。

有没有办法正确排序?

1 个答案:

答案 0 :(得分:0)

变化:

var     aMyArr = [
        {
            "st" : "ISMTP"
        }, , {
            "st" : "IFTP"
        }, {
            "st" : "I"
        }
    ];

var     aMyArr = [
        {
            "st" : "ISMTP"
        }, {
            "st" : "IFTP"
        }, {
            "st" : "I"
        }
    ];

(标记删除&#34;,&#34;)