У меня есть следующая функция сортировки, которая пытается сортировать элементы на основе того, начинаются ли они со значения, введенного в текстовое поле.
items.sort(function(a, b) {
var aStart = a.name.match(new RegExp('^' + textEntered, 'i')) || [];
var bStart = b.name.match(new RegExp('^' + textEntered, 'i')) || [];
if (aStart.length != bStart.length) {
return bStart.length - aStart.length;
}
else {
return b.name - a.name; // error because these aren't numbers
}
return 0;
});
Это работает во всех браузерах, в которых я его пробовал, за исключением IE6, который возвращает ошибку о том, что он ожидал число.
Я попытался реализовать предлагаемое исправление из этой статьи, в котором предлагается «Не повторно использовать переменные аргумента внутри функции сортировки по массиву».
items.sort(function(a1, b1) {
var a, b;
a = a1;
b = b1;
var aStart = a.name.match(new RegExp('^' + textEntered, 'i')) || [];
var bStart = b.name.match(new RegExp('^' + textEntered, 'i')) || [];
if (aStart.length != bStart.length) {
return bStart.length - aStart.length;
}
else {
return b.name - a.name;
}
return 0;
});
но это не имеет никакого эффекта. Кто-нибудь имел дело с этим раньше? Как лучше всего решить эту проблему?