gpt4 book ai didi

JavaScript:用乌克兰字母对对象数组进行排序

转载 作者:行者123 更新时间:2023-11-29 10:51:41 25 4
gpt4 key购买 nike

我有一个对象数组:

var countries = [
{'id': 35, 'name': 'Перу'},
{'id': 45, 'name': 'Індія'},
{'id': 55, 'name': 'Єгипет'},
{'id': 65, 'name': 'Албанія'},
]

我需要按名称 对其进行排序。这是我的算法:

function mySort(s1, s2) {
return s1.name.toString().localeCompare(s2.name.toString());
}

var sorted = countries.sort(mySort);

// result (incorrect)
sorted = [
{'id': 55, 'name': 'Єгипет'},
{'id': 45, 'name': 'Індія'},
{'id': 65, 'name': 'Албанія'},
{'id': 35, 'name': 'Перу'},
]

// must be
sorted = [
{'id': 65, 'name': 'Албанія'},
{'id': 55, 'name': 'Єгипет'},
{'id': 45, 'name': 'Індія'},
{'id': 35, 'name': 'Перу'},
]

我做错了什么?

这里是 example on jsfiddle以及我在 jsfiddle 中的结果截图。

enter image description here

谢谢!

编辑:

我发现只有 Google chrome 排序不正确:FireFox 和 Opera 排序正确。

最佳答案

您的代码对我来说如您所愿。

它不会产生功能上的差异,但您不需要对已经是字符串的内容调用 .toString()。即,您可以将 mySort 简化为:

var mySort = function(s1, s2){
return s1.name.localeCompare(s2.name);
}

(我也更喜欢将所有函数声明为变量,因为它们在 JavaScript 中都是相同的 - 因此应该一致地处理它们。)

但是,根据 http://msdn.microsoft.com/en-us/library/windows/apps/62b7ahzy%28v=vs.94%29.aspx 回答为什么这可能对您不起作用(有趣的是,MDN's page 对此没有任何说明)- 强调我的:

The localeCompare performs a locale-sensitive string comparison of the stringVar and the stringExp and returns -1, 0, or +1, depending on the sort order of the system default locale.

如果您想要只根据字符代码排序而不考虑用户语言环境的东西,您可以改用它:

var mySort = function(s1, s2){
if(s1 == s2){
return 0;
}
return s1.name > s2.name;
}

无论客户或用户的设置/偏好如何,这都会进行一致的排序 - 但它也会返回您分类为不正确的结果。


编辑:正如您提到的,您观察到的行为是 Google Chrome 特有的,这似乎是 Chrome 中的一个已知问题,正在 http://code.google.com/p/v8/issues/detail?id=459 进行跟踪。 .

关于JavaScript:用乌克兰字母对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com