CODE:
Тогда надо для каждой буквы замену делать, получится не компактнее, чем у меня...a = ["Вася", "Васёк", "ВасИлий", "ВасЕк", "Вас", "Васа"];
З. Ы. Мой вариант лучше переписать вот так:
CODE:
function fillCodes(Str, Codes)
{
for (var i=0; i<Str.length; ++i)
if (Str.charAt(i) == 'ё')
Codes[i] = 'е'.charCodeAt(0)+0.5;
else
Codes[i] = Str.charCodeAt(i);
}
function caseUnsensitiveSort(x, y)
{
x = x.toLowerCase();
y = y.toLowerCase();
if (x==y)
return 0;
var xCodes = [];
var yCodes = [];
fillCodes(x, xCodes);
fillCodes(y, yCodes);
var length = Math.min(x.length, y.length);
for (var i=0; i<length; ++i)
if (xCodes[i] != yCodes[i])
return xCodes[i]-yCodes[i];
if (x.length > y.length)
return 1;
else
return -1;
}
a = ["Вася", "Васёк", "ВасИлий", "ВасЕк", "Вас"];
document.write(a.sort(caseUnsensitiveSort).join(', '));
{
for (var i=0; i<Str.length; ++i)
if (Str.charAt(i) == 'ё')
Codes[i] = 'е'.charCodeAt(0)+0.5;
else
Codes[i] = Str.charCodeAt(i);
}
function caseUnsensitiveSort(x, y)
{
x = x.toLowerCase();
y = y.toLowerCase();
if (x==y)
return 0;
var xCodes = [];
var yCodes = [];
fillCodes(x, xCodes);
fillCodes(y, yCodes);
var length = Math.min(x.length, y.length);
for (var i=0; i<length; ++i)
if (xCodes[i] != yCodes[i])
return xCodes[i]-yCodes[i];
if (x.length > y.length)
return 1;
else
return -1;
}
a = ["Вася", "Васёк", "ВасИлий", "ВасЕк", "Вас"];
document.write(a.sort(caseUnsensitiveSort).join(', '));