Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вопрос по массиву (https://javascript.ru/forum/dom-window/52794-vopros-po-massivu.html)

Aetae 07.01.2015 19:46

igorz, так и должно быть. В массивах не бывает пропусков. Возможно вам нужен объект.

igorz 07.01.2015 22:10

рони,
Спасибо, обязательно попробую ваш пример :)

Aetae,
Я понимаю что в массивах не бывает пропусков. Но зачем мне массив б'ольшего размера ?
Сделал свой вариант велосипеда, вроде работает правильно:
var data = [
        ["Name", "1"],
        ["Name", "1"],
        ["Name", "2"],
        ["Name", "5"],
        ["Name", "2"]
    ];

    function sortJSONresult(param) {
        var saveFlag = 0;
        var sortedArray = new Array();
        if (param.length > 0) {
            sortedArray.push(param[0]);            
            for (var i = 1; i < param.length; i++) {
                for (var j = 0; j < sortedArray.length; j++) {                   
                    if ((param[i][1] == sortedArray[j][1]) && (saveFlag != 1)) {
                        sortedArray[j].push(param[i]);
                        saveFlag = 1;
                    } else {
                        if ((j == (sortedArray.length - 1)) && (saveFlag != 1)) {
                            sortedArray.push(param[i]);
                            saveFlag = 1;
                        }
                    }
                }
                saveFlag = 0;
            }
        }
        return sortedArray;
    }

    var srt = sortJSONresult(data);

//смотрю результат
    for (var i = 0; i < srt.length; i++) {
      console.log("i = " + i + ", " + srt[i]);
    }

//i = 0, Name,1,Name,1
//i = 1, Name,2,Name,2
//i = 2, Name,5

Но меня смущает один момент: sortedArray[i].push(param[i]) - так вообще можно делать ? Оно-то вроде работает... но после такого применения почему-то меняется первоначальный массив, который передаётся в функцию (как так ?)
//первоначальный массив меняется на такой:
i = 0, Name,1,Name,1
i = 1, Name,1
i = 2, Name,2,Name,2
i = 3, Name,5
i = 4, Name,2

//этот на вадаче из функции
i = 0, Name,1,Name,1
i = 1, Name,2,Name,2
i = 2, Name,5

kostyanet 08.01.2015 09:40

Цитата:

Сообщение от igorz
sql-запрос у меня сформирован так, как оно того требует:

Вы одуреете строить отношения в js-скриптах. Фактически вам придется написать свой SQL.

Люди даже так делают чтобы воспользоваться готовым: создают временную таблицу которую забивают из запросов, а потом с нее уже запрашивают еще раз. Собственно в большинстве сложных запросов драйвер так и поступает - через временную все собирает.

Короче вам правильно написали - делайте сразу такой запрос, который требуют условия. Отсортировать по мелочи, конечно можно, но не туплю (tuple);

kostyanet 08.01.2015 09:50

Цитата:

Сообщение от igorz
/первоначальный массив меняется на такой:

Вы херней занимаетесь. Это не сортировка и даже не группировка, а хрень какая-то. Количество столбцов не может изменяться после сортировки таблицы.

А я еще думаю почему у вас ни разу слово sort не прозвучало. Короче, прекращайте колхозить, есть научные методы сортировки многомерных (условно в js нет таких) массивов - http://stackoverflow.com/questions/3...ensional-array

Короче как вы делаете - так не бывает, это сферический конь в вакууме, так не делают.

igorz 08.01.2015 13:56

Цитата:

Сообщение от kostyanet (Сообщение 350225)
Люди даже так делают чтобы воспользоваться готовым: создают временную таблицу которую забивают из запросов, а потом с нее уже запрашивают еще раз. Собственно в большинстве сложных запросов драйвер так и поступает - через временную все собирает.

Ну ладно, когда делаешь что-то для себя, где можно смериться со всякими костылями и т.д. (это я не к тому что вы написали).
Но я логику представлял так, что
1. Сделал запрос.
2. Обработал данные не стороне клиента + дальнейшие действия.
А по вашему, выходит, что я вместо 1 запроса в бд должен буду сделать N запросов для формирования таблицы (я правильно понял ?)
И вместо, допустим, 1мс на его выполнение, буду ждать 1мс*N. Так действительно принято делать ?


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