2016-04-08 2 views
1

У меня есть один массив вида:Сортировка массивов в пределах массива по значению

var x = [[29,"Abc","9320","390"],[932,"123","9301","9032"], ...] 

Я ищу, чтобы отсортировать этот массив, так что оно организовано первое значение каждого массива. В этом случае, это будет выглядеть следующим образом:

[[932,"123","9301","9032"], [29,"Abc","9320","390"], ...] 

Я попытался использовать .forEach, но не смог заставить его работать. Может ли кто-нибудь предложить какие-либо предложения?

+1

Я не понимаю логику сортировки. – John

+0

Привет @John - Я хочу распечатать все эти массивы по порядку их первого значения, поэтому сначала будут напечатаны те с наибольшим значением. – GregW

ответ

0

Правильный способ сделать с рода заключается в следующем:

var sorted = x.sort(function(a, b) { 
    return a[0] - b[0]; 
}).reverse(); // the sort is in ascending order so we need to finally reverse the array to have your final array in descending order! 

или даже лучше:

var sorted = x.sort(function(a, b) { 
    return b[0] - a[0]; 
}) 

если сравнивать значения с использованием < или > оно не всегда работает:

Sorting in JavaScript: Shouldn't returning a boolean be enough for a comparison function?

Однако для чисел, используя «-» отлично:

How to sort an array of integers correctly

+1

лучше использовать 'b [0]' там .... – trincot

+0

whoops ... редактирование спасибо! – JordanHendrix

+1

И теперь поверните его, чтобы получить убывающий порядок сортировки. – trincot

1

Попробуйте это:

var x = [[29,"Abc","9320","390"], [932,"123","9301","9032"]]; 

var sorted = x.sort(function(a, b) { 
    return b[0] - a[0]; 
}); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

+0

Обратный вызов, предоставляемый методу сортировки, должен возвращать числовое значение, отрицательное, ноль или положительное. Поэтому 'return b [0] - a [0]' будет более уместным. – trincot

+0

Вы правы, спасибо. Ответ обновлен. – scott113341

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