2014-01-15 3 views
2

Скажем, у меня есть массив чисел:Javascript: Сортировка целочисленный массив вокруг определенного числа

var foo = [20, 10, 03, 04, 02, 15, 01]; 

Мне нужно сортировать числа, используя array.sort поэтому результат имеет все меньше десяти после десяти:

[10, 15, 20, 01, 02, 03, 04]

Прост в использовании. Или мне придется хранить значения во внешних массивах, а затем втягивать их (даже тогда я не уверен, как это сделать только в методе сортировки)? Самое близкое, что я мог найти, это пример this, но он написан в C#, и логика на самом деле не объяснена.

Ближайшая логика, о которой я могу думать, - это splice все числа ниже 10 и поместить их в другой массив. По мере сортировки сортируйте новый массив от наименьшего до самого большого и добавьте в конец начального массива. Однако никакого обратного вызова какого-либо типа нет.

Я пытаюсь использовать это в сочетании с внедрением встроенной сортировки KnockoutJS, поэтому я пытаюсь придерживаться метода сортировки.

+0

ли малые цифры должны быть отсортированы в 1, 2, 3, 4 или они могут быть инвертированы (например: [18, 19, 20, 5, 4, 3, 2, 1])? Определяет ли тип Knockout ссылку на массив как параметр, или у вас есть только a и b для работы? Можете ли вы позвонить .sort дважды, прикованный цепью? – Norguard

+0

Меньшие числа не могут быть инвертированы, должно быть от самого большого до самого маленького. Нокаут позволяет вам цепочки фильтров, да. Метод @steaks работает, я вот-вот поставлю его в кодировщик. – Ojame

ответ

2

Если эти два числа мы сравнивали оба больших числа или оба малых чисел мы сравниваем как обычно. Если один из чисел является большого количества, а другое небольшого количества, мы делаем вид, как и большого количества меньше небольшого числа.

var foo = [20, 10, 03, 04, 02, 15, 01]; 
foo.sort(function(a,b) { 
    if ((a >= 10 && b >= 10) || (a < 10 && b < 10)) { 
    return a - b; 
    } 
    else { 
    return a >= 10 ? -1 : 1; 
    } 
}); 
console.log(foo); 
// [ 10, 15, 20, 1, 2, 3, 4 ] 
+0

Вау, это действительно приятное решение. Притворство большому числу меньше - это хороший трюк, и я никогда бы не подумал. Благодаря! – Ojame

+0

при необходимости, очень полезно. спасибо ! – Ben

1
var largeNumbers = foo.filter(function (v) { return v >= 10; }).sort(); 
var smallNumbers = foo.filter(function (v) { return v < 10; }).sort(); 
var myArray = largeNumbers.concat(smallNumbers); 
Смежные вопросы