带有localeCompare()的JavaScript sort()不适用于传递的参数

时间:2018-05-08 03:41:14

标签: javascript typescript sorting

这是一个非常错误的人。我有这个简单的函数,它通过其中一个字段对一组集合进行排序。

以下是一个示例数组:

"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不是解决方案,因为它无法对重音字符进行排序。

0 个答案:

没有答案