这是一个非常错误的人。我有这个简单的函数,它通过其中一个字段对一组集合进行排序。
以下是一个示例数组:
"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';
...
}
然后它完美无缺!
我用console.log()
检查了它,参数处理得当,类型是String。然而,如果我通过它,那么排序就不会发生,只有我对它进行硬编码。
Lodash不是解决方案,因为它无法对重音字符进行排序。