Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按对象值排序不';不行?_Javascript_Jquery - Fatal编程技术网

Javascript 按对象值排序不';不行?

Javascript 按对象值排序不';不行?,javascript,jquery,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) var city=[{“city”:“London”}、{“city”:“Wal

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

在函数中返回字符串:

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

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

console.log(city)
var city=[{“city”:“London”}、{“city”:“Wales”}、{“city”:“Atom”}、{“city”:“Bacelona”}];
城市排序(函数(a,b){
返回a.city.localeCompare(b.city);
});

document.write(''+JSON.stringify(city,0,4)+'')不能对字符串使用
-
运算符,它们仅用于数字。您需要使用
=
进行词汇顺序

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);

这在任何重复的值上都是不稳定的,其中应返回
0
。从技术上讲,在sort()中不返回
[-1,0,1]
中的一个也是一个怪癖,而且它也不能保证在任何地方都有效…@dandavis,如果城市是重复的,那么两个(或更多)对象的顺序就不能像这样确定。在此之后,您可以包括其他条件,例如,
return(a.city>b.city)|(a.latitude>b.latitude)
nah,您只需要像
returna.city>b.city这样的内容?1:(a.city==b.city?0:-1)
以避免重复执行。具有重复属性和多个可见道具的对象可以简单地使用现有索引位置作为实现稳定性的第二个标准:你是对的。根据Mozilla文档LocalCompare与
,需要一个数字,哪一个更好?
localeCompare
速度较慢,但更易于使用,因为它像排序函数一样输出-1、0和1。还需要注意的是,不要对任何非字符串属性调用它,否则它可能会抛出:
(6).localeCompare(“A”)
。正如我的答案所示,我会选择localeCompare。使用小于的解决方案很棘手,因为它只返回两个值而不是e(-1,0,1)。
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);