Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Если локаль в вашей системе настроена правильно, вы можете использовать метод localeCompare
вместо оператора больше, чем , чтобы сравнить строки - этот метод является локальным.
function sortComparer(a,b){
return a.title.localeCompare(b.title)
};
Для сортировки массива с настраиваемой настройкой выполните следующие действия:
var alphabets = ["A", "B", "C", "Č", "Ć", "D","Dž","Đ","E","F","G","H","I","J","K","L","Lj","M","N","Nj","O","P","R","S",
"ÛŒ","T","U","V","Z","Ž"];
var testArrray = ["B2","D6","A1","Ć5","Č4","C3"];
function OrderFunc(){
testArrray.sort(function (a, b) {
return CharCompare(a, b, 0);
});
}
function CharCompare(a, b, index) {
if (index == a.length || index == b.length)
return 0;
//toUpperCase: isn't case sensitive
var aChar = alphabets.indexOf(a.toUpperCase().charAt(index));
var bChar = alphabets.indexOf(b.toUpperCase().charAt(index));
if (aChar != bChar)
return aChar - bChar
else
return CharCompare(a,b,index+1)
} Удача
Вы пробовали функцию localeCompare()
String:
function sortComparer(a, b) {
return a.title.localeCompare(b.title);
}
Отказ от ответственности: я действительно не проверял, что localeCompare()
делает с теми неанглийскими символами, а MDN тоже не говорит. (Он говорит, что toLocaleLowerCase()
уважает текущую локаль, поэтому можно было бы надеяться, что localeCompare()
будет одинаковым, но все же ...)
localeCompare
намного тяжелее, чем просто сравнение строк с использованием операторов<
,>
и=
. Даже начиная с набора результатов 500, происходит значительное замедление с использованиемlocaleCompare
. Как проиллюстрировано здесь, он медленнее в 400 раз: jsfiddle.net/L4715qey – Kafoso 1 February 2016 в 09:50