按对象值排序不起作用?

时间:2016-04-01 06:51:02

标签: javascript jquery

var city = [{
"city":"London"
},{
"city":"Wales"
}
,{
"city":"Atom"
}
,{
"city":"Bacelona"
}];

city.sort(function(a,b){
return a.city - b.city;
})

console.log(city)

不确定上述代码有什么问题,为什么它不排序?我的逻辑很好。

2 个答案:

答案 0 :(得分:2)

返回字符串函数:

return a.city.localeCompare(b.city);



var city = [{ "city": "London" }, { "city": "Wales" }, { "city": "Atom" }, { "city": "Bacelona" }];

city.sort(function (a, b) {
    return a.city.localeCompare(b.city);
});

document.write('<pre>' + JSON.stringify(city, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您不能在字符串上使用-运算符,它们仅用于数字。您需要使用<><=>=作为词汇顺序。

当你处理非英语单词时,Nina Scholz的答案非常有用,它适用于英语单词。

只需将-更改为>即可使代码正常工作:

var city = [{
    "city": "London"
}, {
    "city": "Wales"
}, {
    "city": "Atom"
}, {
    "city": "Bacelona"
}];

city.sort(function(a,b){
    return (a.city > b.city ? 1 : (a.city === b.city ? 0 : -1));
});

console.log(city);