Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/37: Рейтинг темы: голосов - 37, средняя оценка - 4.89
18 / 18 / 1
Регистрация: 22.11.2012
Сообщений: 62
1

Сортировка массива объектов

28.05.2013, 07:03. Показов 6992. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени суток. Суть проблемы такова: необходимо отсортировать массив объектов по определённому свойству одного объекта. Сам массив содержит 50 элементов, отобранные произвольным образом из другого массива. Пробовал делать так:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
for (var k = 0; k < 50; k++)
        {
            var i = Math.floor(Math.random( ) * (gifts.length));
            selectedGifts.push
            (
            new gift
            (
                gifts [i].id,
                gifts [i].name,
                gifts [i].media,
                gifts [i].pictureUrl,
                gifts [i].price
            )
            )
        };
                for (var i = 0; i < selectedGifts.length; i++)
        {
            if (i === 0)
            {
            selectedGiftsSorted.push
            (
                selectedGifts [i].id,
                selectedGifts [i].name,
                selectedGifts [i].media,
                selectedGifts [i].pictureUrl,
                selectedGifts [i].price
            )
 
            }
            else
            {
            if (parseInt (selectedGifts [i].price) < parseInt (selectedGifts [i--].price))
            {
                selectedGiftsSorted.unshift
                (
                selectedGifts [i].id,
                selectedGifts [i].name,
                selectedGifts [i].media,
                selectedGifts [i].pictureUrl,
                selectedGifts [i].price
                )
            };
            };
        };
- происходит зависание скрипта:
Сортировка массива объектов

Пробовал такой вариант:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function comparePrice (x, y)
    {
        return (parseInt (x.price) - parseInt (y.price));
    };
        for (var k = 0; k < 50; k++)
        {
            var i = Math.floor(Math.random( ) * (gifts.length));
            selectedGifts.push
            (
            new gift
            (
                gifts [i].id,
                gifts [i].name,
                gifts [i].media,
                gifts [i].pictureUrl,
                gifts [i].price
            )
            )
        };
        selectedGifts.sort (comparePrice);
- на выходе получаю массив, состоящий из копий одного объекта.
В обоих вариантах вместо:
Javascript
1
2
3
4
5
6
7
8
9
10
11
selectedGifts.push
(
    new gift
    (
        gifts [i].id,
            gifts [i].name,
        gifts [i].media,
        gifts [i].pictureUrl,
        gifts [i].price
    )
)
поставил
Javascript
1
selectedGifts.push (gifts [i])
,
при этом в первом варианте заменил
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
for (var i = 0; i < selectedGifts.length; i++)
        {
            if (i === 0)
            {
            selectedGiftsSorted.push
            (
                selectedGifts [i].id,
                selectedGifts [i].name,
                selectedGifts [i].media,
                selectedGifts [i].pictureUrl,
                selectedGifts [i].price
            )
 
            }
            else
            {
            if (parseInt (selectedGifts [i].price) < parseInt (selectedGifts [i--].price))
            {
                selectedGiftsSorted.unshift
                (
                selectedGifts [i].id,
                selectedGifts [i].name,
                selectedGifts [i].media,
                selectedGifts [i].pictureUrl,
                selectedGifts [i].price
                )
            };
            };
        };
на
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (var i = 0; i < selectedGifts.length; i++)
        {
            if (i === 0)
            {
            selectedGiftsSorted.push (selectedGifts [i])
            }
            else
            {
            if (parseInt (selectedGifts [i].price) < parseInt (selectedGifts [i--].price))
            {
                selectedGiftsSorted.unshift (selectedGifts [i])
            };
            };
        };
Получил такой результат: первый вариант опять виснет, второй не виснет, но на выходе получаю пустое место. Где ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2013, 07:03
Ответы с готовыми решениями:

Сортировка массива объектов по свойству объекта
Задача: отсортировать массив объектов по свойству объекта const PostApi = { posts: } ...

Сортировка массива объектов по одному из полей
У меня есть массив объектов. В каждом объекте есть поле 'count' и нужно отсортировать этот массив...

Сортировка массива объектов
Доброго времени суток. Есть массив объектов: var mas = ; Как видно из примера внутри каждого...

Как собрать из массива ключей и массива объектов - массив объектов?
Как собрать из массива ключей и массива обьектов - массив объектов? // Массив ключей ; //...

2
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
28.05.2013, 08:22 2
как-то вы слишком серьёзно подошли к вопросу
для массива arr сортировка элементов по их свойству prop по возрастанию:
Javascript
1
arr.sort (new Function ('x, y', 'return (parseInt (x ["prop"]) - parseInt (y ["prop"]))'));
1
18 / 18 / 1
Регистрация: 22.11.2012
Сообщений: 62
28.05.2013, 12:15  [ТС] 3
kalabuni, спасибо, попробую.

Добавлено через 30 минут
kalabuni, попробовал. В веб-консоли Firefox получил сообщение SyntaxError: missing formal parameter для строки, содержащей следующий код:
Javascript
1
selectedGifts.sort (new function ('x, y', 'return (parseInt (x ["price"]) - parseInt (y ["price"]))'));
Добавлено через 23 минуты
Попробую ещё этот вариант:
Javascript
1
2
3
4
5
6
7
selectedGifts.sort
(
    function (x, y)
    {
        return (parseInt (x ["price"]) - parseInt (y ["price"]))
    }
);
О результатах отпишусь здесь.

Добавлено через 1 час 21 минуту
Заработало, всё сортируется правильно. Ещё раз спасибо kalabuni за ответ.
0
28.05.2013, 12:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2013, 12:15
Помогаю со студенческими работами здесь

Сортировка массива объектов
Мне нужно отсортировать массив объектов по значению одного из полей этих объектов (string), как это...

Сортировка массива объектов
У меня есть сортировка массива объектов: Arrays.sort(people, new Comparator&lt;people&gt; () { ...

Сортировка массива объектов по дате
Приветствую еще раз! Как сделать сортировку массива объектов по полю Дата ( Calendar ) ?...

Сортировка массива объектов класса
Добрый день, не могли бы подсказать как сортировать массив объектов по полю Number, учитывая что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru