2013-08-19 4 views
1

Я попытался привести пример, но теперь работает с правильной информацией.Как отсортировать массив поплавков в JavaScript?

var fruits = [110.111, 1245.22222, 2.458, 0.001]; 
fruits.sort(); 
document.write(fruits); 

Результат:

0.001,110.111,1245.22222,2.458 

Но я хочу что-то вроде этого

0.001,2.458,110..111,1245.22222 

Что не так с этим кодом?

+0

Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void

ответ

6

array.sort([compareFunction]) принимает дополнительную функцию, которая работает в качестве пользовательского компаратора

fruits.sort(function(a, b){ 
    return a - b; 
}); 

Если вы хотите отсортировать по убыванию

fruits.sort(function(a, b){ 
    return b - a; 
}); 

с помощью: MDN Array.prototype.sort docs

  • Если compareFunction(a, b) меньше 0, сортировать а к более низким индексом, чем Ь, то есть в первом месте.
  • Если compareFunction(a, b) возвращает 0, оставьте a и b без изменений по отношению друг к другу, но отсортированы по всем различным элементам. Примечание. Стандарт ECMAscript не гарантирует такого поведения, и, таким образом, не все браузеры (например, версии Mozilla, датированные как минимум 2003 годом).
  • Если compareFunction(a, b) больше 0, сортируйте b до более низкого индекса, чем a.
  • compareFunction(a, b) должно всегда возвращать одно и то же значение при задании определенной пары элементов a и b в качестве двух аргументов. Если противоречивые результаты возвращаются, то порядок сортировки не определен

В последнее время я делал некоторое функциональное программирование. Я оставлю этот раздел в качестве другого варианта для людей, которые хотят решить одну и ту же проблему по-разному.

Сначала у нас есть некоторые общие функции полезности. Это необходимо, когда мы хотим определить наши функции сортировки более высокого порядка asc и desc.

const sub = x => y => y - x; 
const flip = f => x => y => f (y) (x); 
const uncurry = f => (x,y) => f (x) (y); 
const sort = f => xs => xs.sort(uncurry (f)); 

Теперь вы можете легко определить asc и desc с точки зрения sub

const asc = sort (flip (sub)); 
const desc = sort (sub); 

Проверьте это

asc ([4,3,1,2]); //=> [1,2,3,4] 
desc ([4,3,1,2]); //=> [4,3,2,1] 

Вы все еще можете сделать заказ сортировки, используя sort (comparator) (someData)

// sort someData by `name` property in ascending order 
sort ((a,b) => a.name - b.name) (someData); //=> ... 
+0

Большое вам спасибо –

+0

Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void

2

Вы можете использовать пользовательскую функцию сортировки, как это: число

fruits.sort(function (a,b) {return a - b;}); 

Array.sort() метод рассматривает как строки, а также члены заказов в порядке ASCII.

+0

Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void

1

Вы можете определить функцию сортировки:

fruits.sort(function(a,b) {return a>b}) 
+0

Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void

1

Используйте пользовательскую функцию для сортировки.

Для сортировки его необходимо создать функцию компаратора, принимая два аргументов, а затем вызвать функцию сортировки с этой компараторе функции следующим образом:

fruits.sort(function(a,b) { return parseFloat(a) - parseFloat(b) }); 

Если вы хотите sort по возрастанию изменить parseInt (a) - parseInt (b) и parseInt (b) - parseInt (a). Обратите внимание на изменение от a до b.

+0

Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void