Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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
带有localeCompare()的JavaScript sort()不';无法使用传递的参数_Javascript_Typescript_Sorting - Fatal编程技术网

带有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()
没有做到这一点。