localeCompare在使用前导变音字符排序单词时显示不一致的行为

wns*_*mth 5 javascript arrays sorting

测试了最新的Firefox和Chrome(在我的系统上有'de'语言环境):

"Ä".localeCompare("A")
Run Code Online (Sandbox Code Playgroud)

给我1,这意味着它认为"Ä"应该出现后, "A"在一个有序,这是正确的.

但:

"Ägypten".localeCompare("Algerien")
Run Code Online (Sandbox Code Playgroud)

给我-1,意思是它认为"Ägypten"应该在排序的顺序之前 出现"Algerien".

为什么?为什么它看起来超过每个字符串的第一个字符,如果它说第一个字符串的第一个字符应该出现在第二个字符串的第一个字符后,当你自己检查它时?

Sil*_*mor 1

这里有适合您需要的方法,复制粘贴此方法:

递归解析字符串并给出 char 区域设置比较结果而不是字符串:)

最终结果 错误已修复,添加了对整个字符串的比较(不正确的停止或递归循环):

String.prototype.MylocaleCompare = function (right, idx){
    idx = (idx == undefined) ? 0 : idx++;

    var run = right.length <= this.length ? (idx < right.length - 1 ? true : false) : (idx < this.length - 1 ? true : false);


    if (!run) 
    {
        if (this[0].localeCompare(right[0]) == 0)
            {
                return this.localeCompare(right);
            }
            else
            {
                return this[0].localeCompare(right[0])
            }
    }

    if(this.localeCompare(right) != this[0].localeCompare(right[0]))
    {
        var myLeft = this.slice(1, this.length);
        var myRight = right.slice(1, right.length);
        if (myLeft.localeCompare(myRight) != myLeft[0].localeCompare(myRight[0]))
        {
            return myLeft.MylocaleCompare(myRight, idx);
        }
        else
        {
            if (this[0].localeCompare(right[0]) == 0)
            {
                return myLeft.MylocaleCompare(myRight, idx);
            }
            else
            {
                return this[0].localeCompare(right[0])
            }
        }
    }
    else
    {
        return this.localeCompare(right);
    }

}
Run Code Online (Sandbox Code Playgroud)