【发布时间】: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 > I 比较。
有什么方法可以正确排序吗?
【问题讨论】:
标签: arrays string sorting object jscript