2013-09-24 5 views
1

У меня этот массив в JQuery:Как отсортировать многомерный массив в jquery одним полем?

var myArray = new Array(); 
myArray[1] = new Array(); 
myArray[2] = new Array(); 
myArray[3] = new Array(); 
myArray[4] = new Array(); 
myArray[5] = new Array(); 

Элемент myArray[x][1] (х может быть от 1 до 5) содержит числовое значение (цена) и элемент myArray[x][2] другое числовое значение (идентификатор,). Мне нужно заказать массив по значению myArray[x][1] (цена), не отделяя каждую цену от его идентификатора (его [x][2]).

Как мне?

+0

http://stackoverflow.com/questions/979256/sorting-an-array-of-javascript-objects?rq=1 – Alex

+0

@Alex, что ISN То же самое – musefan

+0

@musefan: Это очень * почти то же самое, что и массивы. Но, вероятно, не * точный * дубликат. –

ответ

5

Вы можете использовать Array#sort для этого:

myArray.sort(function(a, b) { 
    return a[1] - b[1]; 
}); 

... если предположить, что [1] записи в подмассивов фактически являются числами.

См. Пример в прямом эфире ниже.


Примечание стороны # 1: Обратите внимание, что индексы массива начинаются с 0, так что ваш массив цит имеет undefined (а не к югу от массива) в первой позиции. Вы хотите исправить это, прежде чем делать это, возможно, выполнив следующее.


Примечание стороны # 2: В JavaScript нет почти никогда никаких оснований писать new Array(). Вместо этого просто используйте литерал массива: []. Например, ваш котировочный код может быть:

var myArray = [ 
    [], 
    [], 
    [], 
    [], 
    [] 
]; 

... если вы исправите ошибку, указанную выше.


Live Example | Live Source:

// [0] is the id, [1] is the price 
var myArray = [ 
    [1, 14.95], 
    [2, 7.50], 
    [3, 8.99], 
    [4, 12.25], 
    [5, 13.72] 
]; 

myArray.sort(function(a, b) { 
    return a[1] - b[1]; 
}); 

var index, entry; 
for (index = 0; index < myArray.length; ++index) { 
    entry = myArray[index]; 
    console.log(index + ": " + entry[0] + " - " + entry[1]); 
} 

Выход:

0: 2 - 7.5 
1: 3 - 8.99 
2: 4 - 12.25 
3: 5 - 13.72 
4: 1 - 14.95
+0

работать отлично, вы спасли день! ^^ Я признаю, что не понял полностью, что происходит, но я потрачу свое время, чтобы сделать это. Большое спасибо. –

+1

@ElisabettaFalivene: Рад, что помогло! –

+1

@Elisabetta: Функция 'Array # sort' принимает функцию, которую он будет вызывать повторно, чтобы сравнивать записи из массива при его сортировке. Он передает функцию два args (записи для сравнения). Функция должна возвращать отрицательное значение, если первая должна быть «до» второй, «0», если две записи эквивалентны, или положительное число, если второе должно быть «до» первого.Поэтому, если вы сравниваете цены, и если цена является второй записью ('[1]') в каждом подматрице, тогда 'a [1] - b [1]' отрицательно, если 'a [1]' ' это '<' 'b [1]', '0', если они одинаковые, или положительные, если' b [1] 'is'> '' a [1] '. –

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