Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2012, 15:09
Кандидат Javascript-наук
Отправить личное сообщение для Bebarr Swallow Посмотреть профиль Найти все сообщения от Bebarr Swallow
 
Регистрация: 17.03.2011
Сообщений: 113

Сортировка многомерных массивов
Написал такой код код:
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().
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2012, 15:12
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

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

шутка, обьясни что тебе надо подробнее может я помогу тебе
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2012, 15:22
Кандидат Javascript-наук
Отправить личное сообщение для Bebarr Swallow Посмотреть профиль Найти все сообщения от Bebarr Swallow
 
Регистрация: 17.03.2011
Сообщений: 113

Сообщение от Mахmахmахimus Посмотреть сообщение
обьясни что тебе надо подробнее может я помогу тебе
Ну обычная сортировка если применить к многомерному массиву то она все сортирует по очереди - сначала по первому элементу, потом по второму.

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


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


Нужно указать сортировку по вторым буквам из массива.
Ответить с цитированием
  #4 (permalink)  
Старый 11.02.2012, 15:42
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

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'))
__________________
29375, 35

Последний раз редактировалось Aetae, 11.02.2012 в 15:45.
Ответить с цитированием
  #5 (permalink)  
Старый 11.02.2012, 15:51
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

var db=[
  ["A","B"],
  ["B","B"],
  ["B","A"],
  ["A","A"]
]
db.sort(function(a,b){
return a[1] > b[1]
})
alert(db.join('\n'))
Ответить с цитированием
  #6 (permalink)  
Старый 11.02.2012, 15:52
Кандидат Javascript-наук
Отправить личное сообщение для Bebarr Swallow Посмотреть профиль Найти все сообщения от Bebarr Swallow
 
Регистрация: 17.03.2011
Сообщений: 113


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

Последний раз редактировалось Bebarr Swallow, 11.02.2012 в 15:54.
Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2012, 15:55
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Сообщение от Bebarr Swallow
Нужно указать сортировку по вторым буквам из массива.
Сообщение от Bebarr Swallow
Первые значения массива не отсортированы.
правда что ли? не может быть такого!
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2012, 16:14
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

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'))
Ответить с цитированием
  #9 (permalink)  
Старый 11.02.2012, 17:58
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

держи братишка, 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'));

Последний раз редактировалось Mахmахmахimus, 11.02.2012 в 18:35.
Ответить с цитированием
  #10 (permalink)  
Старый 11.02.2012, 18:28
Интересующийся
Отправить личное сообщение для alexben Посмотреть профиль Найти все сообщения от alexben
 
Регистрация: 11.02.2012
Сообщений: 26

Mахmахmахimus, + 1
только дефаут значение желательно указать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные из массивов и логика для их вычесления rrkhissamov Общие вопросы Javascript 2 27.01.2012 11:39
Сортировка и фильтрация json jQuery amt779 jQuery 4 28.07.2011 12:53
Как ограничить количество элементов (списков <li>) массивов Naum Элементы интерфейса 2 04.04.2011 11:56
Сортировка нескольких массивов PAMAC Общие вопросы Javascript 4 07.02.2011 14:55
Сортировка числовых данных в таблице Vladsss Общие вопросы Javascript 15 01.09.2009 17:02