我试图按照每个元素的'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比较。
有什么办法把它正确地分类吗?
发布于 2014-06-26 14:57:23
更改:
var aMyArr = [
{
"st" : "ISMTP"
}, , {
"st" : "IFTP"
}, {
"st" : "I"
}
];至
var aMyArr = [
{
"st" : "ISMTP"
}, {
"st" : "IFTP"
}, {
"st" : "I"
}
];(删去“,")
https://stackoverflow.com/questions/24417717
复制相似问题