我试图按照“' 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
比较。
有没有办法正确排序?
答案 0 :(得分:0)
变化:
var aMyArr = [
{
"st" : "ISMTP"
}, , {
"st" : "IFTP"
}, {
"st" : "I"
}
];
到
var aMyArr = [
{
"st" : "ISMTP"
}, {
"st" : "IFTP"
}, {
"st" : "I"
}
];
(标记删除&#34;,&#34;)