Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 15:15   #1
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию Сортировка массива по значению

Подскажите пожалуйста, как сортировать массив по значению.

Пример:

var data = {
"3" : "b",
"1" : "d",
"2" : "a",
"4" : "c"
}

При выводе нужно получить очередность:

"2" : "a",
"3" : "b",
"4" : "c",
"1" : "d",

Заранее, спасибо.
Microplankton вне форума Ответить с цитированием
Старый 15.04.2015, 15:48   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Это хэш, а не массив, хэши не сортируются.
Можешь из этого сделать массив и сортануть/вывести его:
Код:
var data = {
"3" : "b",
"1" : "d",
"2" : "a",
"4" : "c"
};
var out = [];
for (var i in data) {
    var tmp = { 
        key: i,
        value: data[i]
    };
    tmp[i] = tmp.value;
    tmp.toString = function(){ return '"'+this.key+'": "'+this.value+'"' }
    out.push(tmp);
};
console.log('in:  ', out);
out.sort(function(a,b){return (a.value > b.value)-.5});
console.log('out: ', out);
console.log('result: \n', out.join(',\n'));
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 15.04.2015, 17:40   #3
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Naive Посмотреть сообщение
Это хэш, а не массив, хэши не сортируются.
Можешь из этого сделать массив и сортануть/вывести его:
Код:
var data = {
"3" : "b",
"1" : "d",
"2" : "a",
"4" : "c"
};
var out = [];
for (var i in data) {
    var tmp = { 
        key: i,
        value: data[i]
    };
    tmp[i] = tmp.value;
    tmp.toString = function(){ return '"'+this.key+'": "'+this.value+'"' }
    out.push(tmp);
};
console.log('in:  ', out);
out.sort(function(a,b){return (a.value > b.value)-.5});
console.log('out: ', out);
console.log('result: \n', out.join(',\n'));

Что значит это не массив, а хэш? например var array={'name1':'test1', 'name2':'test2'} разве это не ассоциативный массив?
Microplankton вне форума Ответить с цитированием
Старый 15.04.2015, 18:23   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

typeof(array) вам скажет
lomastr_ вне форума Ответить с цитированием
Старый 15.04.2015, 18:30   #5
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
typeof(array) вам скажет
что-то везде одинакового, что var array={'name1':'test1', 'name2':'test2'}, что var a = new Array("a", 1, true)

Все одно - object

Может я не правильно typeof(array) использую?
Microplankton вне форума Ответить с цитированием
Старый 15.04.2015, 18:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что значит это не массив, а хэш?
Вот что говорят авторитетные источники: http://javascript.ru/basic/array
Цитата:
Javascript поддерживает два вида структуры "массив":

Ассоциативный массив (хеш), где данные хранятся по произвольному ключу.
Об этом читайте в разделе Объекты.

Числовой массив Array, где данные хранятся по номерам.
Он описан в этой статье.
А точнее: http://javascript.ru/tutorial/object/intro
Цитата:
Объект в javascript представляет собой обычный ассоциативный массив или, иначе говоря, "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько стандартных методов.
Грубо говоря то, что до двоеточия это "имя" свойства.
I'm learning to live...

Последний раз редактировалось Stilet; 15.04.2015 в 20:18.
Stilet вне форума Ответить с цитированием
Старый 15.04.2015, 18:41   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

да тайпоф обрезает ...
попробуйте так
Object.prototype.toString.call( [] )
Object.prototype.toString.call( {} )
lomastr_ вне форума Ответить с цитированием
Старый 15.04.2015, 18:42   #8
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Цитата:
Что значит это не массив, а хэш? например var array={'name1':'test1', 'name2':'test2'} разве это не ассоциативный массив?
Ага, теперь получите свойство ассоциативного массива, которое бы выдавало его количество элементов. length? count? Да нету у него такого. Потому что ассоциативный массив - это не массив в обычном понимании. В лучшем случае для такого придётся использовать методы объекта Object.

Код:
Object.keys(array).length
^-.-^ My GitHub

Последний раз редактировалось Fenex; 15.04.2015 в 18:47.
Fenex вне форума Ответить с цитированием
Старый 15.04.2015, 20:04   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Microplankton Посмотреть сообщение
Что значит это не массив, а хэш? например var array={'name1':'test1', 'name2':'test2'} разве это не ассоциативный массив?
Это ассоциативный массив, но хэш , спасибо паскалю и учебники по нему, в других (си-подобных) языках эти понятия кардинально разные.
А JS — вообще особенный, в нем массив наследуется от объекта (хэша).
Но при этом в массив встроено масса вкусных методов, и свойство length.
На самом деле, в JS все наследуется от объекта, но есть "простые" объекты намбер, стринг, булен и проч. и объекты (массивы, функции) еще есть геттеры/сеттеры и еще дохрена всего, но не будем о грустном, оснавная разница между ними — метод хранения в переменных. Простые хранятся напрямую, а объекты + то о чем говорить рано, как ссылки на эти самые объекты.

typeof
Эта штука вообще устарела. Как надобность она умерла где-то в начале 2000-х. Когда при обращении к переменной, которая не создана движки браузеров научились генерировать на их месте объект undefined.
Сейчас юзают instanceof.

Если имелось ввиду что-то вроде
Код:
var data = [];
data[3] = "b";
data[1] = "d";
data[2] = "a";
data[4] = "c";
то справится обычный .sort()
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 15.04.2015, 20:09   #10
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
Эта штука вообще устарела. Как надобность она умерла где-то в начале 2000-х.
что то видно их как мух во всех фреймворках и не только
lomastr_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++.Определите среднее значение элементов массива Х(20). Найдите индекс элемента массива, наиболее близкого к среднему значению. dunhill55 Помощь студентам 1 16.12.2012 19:02
Все отрицательные элементы массива увеличить на величину, равную среднему значению положительных элементов массива ksenia/shtepa C# (си шарп) 4 04.05.2012 19:10
Сортировка по наибольшему значению Irek11 Microsoft Office Excel 4 14.08.2011 17:58
Сортировка grida по значению поля amator_roma Помощь студентам 2 30.11.2010 16:41