Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Array.sortOn(): сортирует Number как String. (http://www.flasher.ru/forum/showthread.php?t=202478)

mj_nooker 18.07.2013 17:27

Array.sortOn(): сортирует Number как String [РЕШЕНО]
 
Привет всем!

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


В цикле заполняю массив:
Код AS1/AS2:

medalsForSort_array[i] = {nameId_num: counter, id_num : id, votes_num: votes};

Передаю сюда id и votes_num как Number.
Естественно, из-за того, что в объекте хранятся нетипизированные данные, при попытке
Код AS1/AS2:

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/6...-array-sorting

iNils 18.07.2013 19:32

Код AS1/AS2:

medalsForSort_array.sortOn('votes_num', Array.DESCENDING | Array.NUMERIC);


mj_nooker 21.07.2013 05:44

Спасибо всем!

Вобщем, так и писал
Код AS1/AS2:

medalsForSort_array.sortOn('votes_num', Array.DESCENDING | Array.NUMERIC);

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

1) Передавал из парсинга XML:
Код AS1/AS2:

childNodes[i].firstChild

2) В ф-и заполнения массива получал в аргументах в таком виде:
Код AS1/AS2:

(..., votes:Number, ...)

И делал объект
Код AS1/AS2:

var obj:Object = {..., votes_num:votes, ...};

Вот массив и сортировался по votes_num, как по String.

Как только поменял вот так
Код AS1/AS2:

childNodes[i].firstChild.nodeValue

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


Часовой пояс GMT +4, время: 05:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.