2013-04-27 3 views
10

У меня есть массив объектов, и я хочу сортировать массив ASC по значению 'home'. Это поле всегда числовое. Так что я попытался это:Сортировка массива объектов с помощью метода sortBy подчёркивания

_.sortBy(data.home.en, function(obj){ return obj.home }); 

Это работает хорошо, когда значение «дома» ниже, чем 10, но по какой-то причине 10 идет сразу после 1, поэтому мой последний заказ выглядит следующим образом 1,10 , 11,2,3,4,5,6,7,8,9. Почему это происходит? Спасибо ...

ответ

27

Ваши значения obj.home являются строками, поэтому их сравнивают как строки, а '1' < '10' - это правда. Если вы хотите, чтобы отсортировать их как числа затем преобразовать их в числа:

_.sortBy(data.home.en, function(obj){ return +obj.home }); 

или:

_.sortBy(data.home.en, function(obj){ return parseInt(obj.home, 10) }); 

Демо: http://jsfiddle.net/ambiguous/DpfgV/1/

+0

возвращение ParseInt (obj.home, 10) ==> вы можете do return 'obj.home * 1' и сделает трюк без использования parseInt – ncubica

+1

@ncubica: Я думаю, что' + obj.home' является более распространенным ярлыком. –

+0

, но '+ obj.home' добавит строку без цифр, например, если у вас есть' 10 (int) + "00" (str) 'result, она будет' 1000', но если вы напишете '10 + (" 00 " * 1) 'результат будет 10., что его, что вы ожидаете? – ncubica

Смежные вопросы