Zoeken op website

typescript - JavaScript sort() met localeCompare() werkt niet met doorgegeven parameter


Dit is behoorlijk vervelend. Ik heb deze eenvoudige functie die een array van collecties sorteert op een van de velden.

Hier is een voorbeeldarray:

"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"
    }];

Het gaat nog langer door, maar ik denk dat je het idee hebt begrepen. En hier is de functie:

sortArray(source: any[], key) {

    let result = source.sort((a, b) => { 
        return a[String(key)].localeCompare(b[String(key)]); 
    });

    return result;
}

Nu komt het mysterie. Als ik de functie zo aanroep:

countries_sorted = sortArray(countries, 'nameeng');

dan is het resultaat chaos, de array-elementen worden in een schijnbaar willekeurige volgorde teruggegeven.

Als ik het veldnaam echter op deze manier in de functie hardcode:

sortArray(source: any[], key) {
  let key = 'nameeng';
  ...
}

dan werkt het perfect!

Ik heb het gecontroleerd met console.log(), de parameter wordt correct verwerkt, het type is String. Toch gebeurt het sorteren niet als ik het doorgeef, alleen als ik het hardcode.

Lodash is geen oplossing omdat het geen geaccentueerde tekens kan sorteren.