【问题标题】:jscript: wrong sort behavior?jscript:错误的排序行为?
【发布时间】:2014-06-25 20:13:59
【问题描述】:

我正在尝试按每个元素的“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 &gt; I 比较。

有什么方法可以正确排序吗?

【问题讨论】:

    标签: arrays string sorting object jscript


    【解决方案1】:

    变化:

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

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

    (标记删除“,”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多