Как отсортировать массив в JavaScript - PullRequest
5 голосов
/ 28 декабря 2011

Я не использую ассоциативный массив. Я использую 1d массив, как это,

array("1,a","5,b","2,c","8,d","6,f");

Как мне отсортировать этот массив?

Результат должен быть,

array("1,a","2,c","5,b","6,f","8,d");

Ответы [ 9 ]

4 голосов
/ 28 декабря 2011

sort() без пользовательской функции сортировки отсортирует ее по вашему желанию (лексикографически).

>>> ["1,a","5,b","2,c","8,d","6,f"].sort();
["1,a", "2,c", "5,b", "6,f", "8,d"]

Обратите внимание, что это будет сортировать исходный массив. Вы можете сделать мелкую копию с slice().

Если какое-либо из ваших чисел больше 9, и вы хотите отсортировать его по порядковому номеру, вам понадобится пользовательская функция сортировки.

["1,a","5,b","2,c","8,d","6,f"].sort(function(a, b) {
    return parseInt(a, 10) - parseInt(b, 10);
});
2 голосов
/ 28 декабря 2011

Используйте array.sort() встроенную функцию JS.Документация здесь: http://www.w3schools.com/jsref/jsref_sort.asp

1 голос
/ 27 декабря 2012

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

<script>
var abc=new Array("1,a","5,b","2,c","8,d","6,f");
document.write("<br/>");
document.write(abc.sort());
</script>
1 голос
/ 28 декабря 2011

Я собираюсь пойти дальше и предположить, что вы хотите сначала отсортировать по числовой части, выполнить числовую сортировку, а затем выполнить дополнительную лексографическую (строковую) сортировку по биту после запятой. Таким образом, значение типа «11, a» будет заканчиваться после «2, a» - если вы просто выполните сортировку по умолчанию «11, a» будет заканчиваться до «2, a». Итак:

var a = ["1,a","11,a","8,a","24,z","5,b","2,c","8,d","6,f"];

a.sort(function(a,b) {
   var aparts = a.split(","),
       bparts = b.split(","),
       anum = +aparts[0], // convert first part to number
       bnum = +bparts[0],
       aletter = aparts[1],
       bletter = bparts[1];

   if (anum === bnum)
      return aletter < bletter ? -1 : aletter === bletter ? 0 : -1;
   else
      return anum - bnum;
});

Результат:

["1,a", "2,c", "5,b", "6,f", "8,a", "8,d", "11,a", "24,z"]
1 голос
/ 28 декабря 2011

Вам нужно написать собственную функцию сравнения для сравнения чисел, в противном случае по умолчанию sort() поместит что-то вроде "40,a" перед "5,b".

Вот пример, который просто разбивается на , символ и принимает значение, прежде чем оно будет числовым.Я добавил "40,a" в пример, чтобы показать, что он правильно заказывает числа> 9.

function mySort(a,b)
{
    return a.split(",", 1) - b.split(",", 1);
}

var theArray = ["1,a", "5,b", "2,c", "40,a", "8,d", "6,f"];
theArray.sort(mySort); // "1,a","2,c","5,b","6,f","8,d","40,a"
1 голос
/ 28 декабря 2011

Вот что я делаю:

var arr1 = new Array("1,a","5,b","2,c","8,d","6,f");
var arr2 = arr1.sort( function(a, b){
    var ax = a.split(",");
    var bx = b.split(",");
    return ax[0]-bx[0];
});

document.getElementById("result").innerHTML = arr2.join(" : ");
1 голос
/ 28 декабря 2011

попробуйте с:

function sortNumber(a,b)
{
return (a.split(","))[0] - (b.split(","))[0] ;
}

var n = ["1,a","5,b","2,c","8,d","6,f"];
alert( n.sort(sortNumber) );
1 голос
/ 28 декабря 2011

http://jsfiddle.net/Dht33/

var arrayVar = ["1,a","2,c","5,b","6,f","8,d"];

arrayVar.sort()

arrayVar; // "1,a","2,c","5,b","6,f","8,d"
0 голосов
/ 28 декабря 2011

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

<script type="text/javascript">
var testArray = new Array();
testArray[0] = '1';
testArray[1] = '5';
testArray[2] = '9';
testArray[3] = '8';
testArray[4] = '6';
testArray[5] = '2';
var getlength = testArray.length;
testArray.sort(function(a,b){return a - b});
for(var i=0; i<getlength;i++) {         
    alert(testArray[i]);
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...