Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка многомерных массивов (https://javascript.ru/forum/misc/25639-sortirovka-mnogomernykh-massivov.html)

Bebarr Swallow 11.02.2012 15:09

Сортировка многомерных массивов
 
Написал такой код код:
var db=[
    ["Total Commander",true],
    ["WinRAR",true],
    ["CCleaner",false],
    ["AIMP3",false]
]

function draw(){
    db.sort() // Вот сюда нужно функцию прикрутить. Пример - db.sort(myFunc)
    var body=document.getElementsByTagName("body")[0]
    var table=document.createElement("table")
    for(var x=0;x<db.length;x++){
        var tr=document.createElement("tr")
        var td=document.createElement("td")
        td.innerText=db[x][0]
        tr.appendChild(td)
        var td=document.createElement("td")
        td.innerText=db[x][1]
        tr.appendChild(td)
        table.appendChild(tr)
    }
    body.appendChild(table)
}

draw()


Надо написать функцию для сортирования по одному из элементов массива (либо по текстовому значению, либо по true/false или т.п.). Также приветствую уже готовые функции сортировки для sort().

Mахmахmахimus 11.02.2012 15:12

Ваши предложения и сроки выполнения?

шутка, обьясни что тебе надо подробнее может я помогу тебе

Bebarr Swallow 11.02.2012 15:22

Цитата:

Сообщение от Mахmахmахimus (Сообщение 156737)
обьясни что тебе надо подробнее может я помогу тебе

Ну обычная сортировка если применить к многомерному массиву то она все сортирует по очереди - сначала по первому элементу, потом по второму.

Пример:
var db=[
  ["A","B"],
  ["B","B"],
  ["B","A"],
  ["A","A"]
]
db.sort()


Результат сортировки:
["A","A"],
["A","B"],
["B","A"],
["B","B"]


Нужно указать сортировку по вторым буквам из массива.

Aetae 11.02.2012 15:42

var db=[
  ["A","B"],
  ["B","B"],
  ["B","A"],
  ["A","A"]
]
db.sort(function(a,b){
     if (a[1] < b[1]){
        return -1;
     }else if (a[1] > b[1]) {
        return  1;
     }else{
        return 0;
     }
})
alert(db.join('\n'))

Mахmахmахimus 11.02.2012 15:51

var db=[
  ["A","B"],
  ["B","B"],
  ["B","A"],
  ["A","A"]
]
db.sort(function(a,b){
return a[1] > b[1]
})
alert(db.join('\n'))

Bebarr Swallow 11.02.2012 15:52


Первые значения массива не отсортированы. Но дальше сам доделаю. Спасибо

Mахmахmахimus 11.02.2012 15:55

Цитата:

Сообщение от Bebarr Swallow
Нужно указать сортировку по вторым буквам из массива.

Цитата:

Сообщение от Bebarr Swallow
Первые значения массива не отсортированы.

правда что ли? не может быть такого!

Shaci 11.02.2012 16:14

var db=[
  ["A","B"],
  ["B","B"],
  ["B","A"],
  ["A","A"]
]

function sortArr(a,b){
     if (a[1] < b[1]){
        return -1;
     }else if (a[1] > b[1]) {
        return  1;
     }else{
        if (a[0] < b[0]) {
           return -1; 
        }
        else if (a[0] > b[0]) {
           return 1;
        } 
        else {
           return 0;
        }
     }
}

db.sort(sortArr)
alert(db.join('\n'))

Mахmахmахimus 11.02.2012 17:58

держи братишка, s - номер ведущего столбца, и спасибо что в карму минусанул...

var db = [ [ "3", "2", "A" ],
        [ "2", "4", "A" ],
        [ "1", "1", "B" ],
        [ "4", "3", "B" ] ];

var s = prompt('номер основного столбца') || 0;

db.sort(function(a, b) {
	return a[s] == b[s] ? a > b : a[s] > b[s]
});
alert(db.join('\n'));

alexben 11.02.2012 18:28

Mахmахmахimus, + 1
только дефаут значение желательно указать.


Часовой пояс GMT +3, время: 03:21.