带有localeCompare()的JavaScript sort()不';无法使用传递的参数
这真是个讨厌的家伙。我有一个简单的函数,它按一个字段对集合数组进行排序 以下是一个示例阵列:带有localeCompare()的JavaScript sort()不';无法使用传递的参数,javascript,typescript,sorting,Javascript,Typescript,Sorting,这真是个讨厌的家伙。我有一个简单的函数,它按一个字段对集合数组进行排序 以下是一个示例阵列: "countries": [ { "id": "AW", "name": "Aruba", "nameeng": "Aruba", "capital": "Oranjestad", "currency": "AWG", "phonecode": "297" }, { "
"countries": [
{
"id": "AW",
"name": "Aruba",
"nameeng": "Aruba",
"capital": "Oranjestad",
"currency": "AWG",
"phonecode": "297"
},
{
"id": "BM",
"name": "Bermuda",
"nameeng": "Bermuda",
"capital": "Hamilton",
"currency": "BMD",
"phonecode": "1"
},
{
"id": "GR",
"name": "Ελλάδα",
"nameeng": "Greece",
"capital": "Athens",
"currency": "EUR",
"phonecode": "30"
}];
它持续的时间更长,但我想你明白了。下面是函数:
sortArray(source: any[], key) {
let result = source.sort((a, b) => {
return a[String(key)].localeCompare(b[String(key)]);
});
return result;
}
现在,谜团来了。如果我像这样调用函数:
countries_sorted = sortArray(countries, 'nameeng');
sortArray(source: any[], key) {
let key = 'nameeng';
...
}
结果是混沌,数组元素以看似随机的顺序返回
但是,如果我将字段名硬编码到函数中,如下所示:
countries_sorted = sortArray(countries, 'nameeng');
sortArray(source: any[], key) {
let key = 'nameeng';
...
}
那它就完美了
我已经用console.log()
检查过了,参数处理正确,类型是String。然而,如果我通过它,排序就不会发生,只有在我硬编码的情况下
Lodash不是解决方案,因为它无法对重音字符进行排序。仅供参考(与您的问题无关)
.sort()
对数组进行适当排序,因此无需让result=。。。。。;返回结果
-您可以返回source.sort…
@JaromandaX,因为该方法对数组进行了适当的排序,是否需要返回
?取决于您如何使用函数,我猜,@GerardoFurtado-我不会返回我自己,但是。。。用例?尝试使用let result=source.slice().sort(……
返回arrayJaromanda X的排序副本,谢谢,这很有效!有趣的是,Object.assign()
没有做到这一点。