function merge(left, right, cmp, dir) {
var result = [];
while (left.length > 0 && right.length > 0)
if (compare(left[0], right[0], 4, dir)) {
//if(left[0].length < right[0].length){
result.push(left.shift());
}
else {
result.push(right.shift());
}
if (left.length) {
return result.concat(left)
}
else {
return result.concat(right)
}
}
function compare(first, second, param, dir) {
var first_cr, second_cr;
switch (param) {
case "1":
first_cr = (first.match(new RegExp("a", "ig")) || []).length;
second_cr = (second.match(new RegExp("a", "ig")) || []).length;
break;
case "2":
first_cr = (first.match(new RegExp("[,.!?;:()]", "ig")) || []).length;
second_cr = (second.match(new RegExp("[,.!?;:()]", "ig")) || []).length;
break;
case "3":
first_cr = first.split(" ").length;
second_cr = second.split(" ").length;
break;
case "4":
first_cr = first.length;
second_cr = second.length;
break;
case "5":
first_cr = first.split(" ")[0].length;
second_cr = second.split(" ")[0].length;
break;
}
if (dir * 1) {
return first_cr > second_cr;
}
else {
return first_cr < second_cr;
}
}
Сравниваю по одному и тому-же условию но разными способами и на выходе получаются совершенно разные результаты закомментированное условие работает нормально Второе сортирует но не полностью, у него какие-то проблемы с правой половиной массива
Сборка персонального компьютера от Artline: умный выбор для современных пользователей