PDA

Просмотр полной версии : Array.sortOn(): сортирует Number как String.


mj_nooker
18.07.2013, 17:27
Привет всем!

Может кто сталкивался с такой проблемой


В цикле заполняю массив: medalsForSort_array[i] = {nameId_num: counter, id_num : id, votes_num: votes};
Передаю сюда id и votes_num как Number.
Естественно, из-за того, что в объекте хранятся нетипизированные данные, при попытке medalsForSort_array.sortOn('votes_num', 2); я получаю в принципе отсортированный массив, только при этом видно, что сортировка происходила по votes_num как String - тоесть, например 5 > 10.
Но мне надо по votes_num как Number :)

Пожалуйста, подскажите, есть нормальные, некостыльные, методы побороть?

Psycho Tiger
18.07.2013, 18:43
http://stackoverflow.com/questions/6632983/as3-numerical-array-sorting

iNils
18.07.2013, 19:32
medalsForSort_array.sortOn('votes_num', Array.DESCENDING | Array.NUMERIC);

mj_nooker
21.07.2013, 05:44
Спасибо всем!

Вобщем, так и писал
medalsForSort_array.sortOn('votes_num', Array.DESCENDING | Array.NUMERIC);

Из-за чего глючило - из-за того, что свойство 'votes_num' объектов в medalsForSort_array было object, а не Number. Тоесть еще на этапе получения этого значения из XML я забыл указать скрипту, что беру значение, а не ноду.

1) Передавал из парсинга XML: childNodes[i].firstChild
2) В ф-и заполнения массива получал в аргументах в таком виде: (..., votes:Number, ...)
И делал объект
var obj:Object = {..., votes_num:votes, ...};
Вот массив и сортировался по votes_num, как по String.

Как только поменял вот так childNodes[i].firstChild.nodeValue - трейс показал typeOf(votes_num) == number и массив начал сортироваться нормально - ибо матчасть надо помнить железно. :)