Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   перебор массива с отступом (https://javascript.ru/forum/misc/59093-perebor-massiva-s-otstupom.html)

laimas 27.10.2015 19:21

Цитата:

Сообщение от рони
не понимаю причём тут чётность

Ну в данном случае, если именно такой массив и по полам вложение, то нужно брать срезы через один.

рони 27.10.2015 19:35

laimas,
не очень понимаю как очень просто брать эти срезы
вариант решения
function matrix(c, d) {
    for (var g = [], a = 0; a < d * d; a += c) {
        for (var f = [], e = [], b = 0; b < c; b++) e.push(a + b + 1);
        f.push(e);
        for (b = 0; b < c - 1; b++) e = e.map(function(a) {
            return a + d
        }), f.push(e);
        g.push(f);
        !a || (a + c) % d || (a += d * (c - 1))
    }
    return g
};
alert(JSON.stringify(matrix(2,4)))// матрицу 4 на 4 разбить 2 на 2
alert(JSON.stringify(matrix(3,9)))//этоn же вариант и для матрицы 9 на 9 на 3 на 3 ... matrix(3,9)

laimas 27.10.2015 20:06

var a = [
    ['01', '02', '03', '04'],
    ['05', '06', '07', '08'],
    ['09', '10', '11', '12'],
    ['13', '14', '15', '16']
], b = [], i, s = 2;

for(i=0; i<a.length/2; i++) {
    b.push(a[i].slice(0, s), a[i+1].slice(0, s));
    b.push(a[i].slice(s), a[i+1].slice(s))
}

console.log(b)


Ну естественно, если входной массив с произвольной длиной вложений и срезов которые нужно взять, то вычисляем эти условия.

laimas 27.10.2015 20:35

Кстати, рони, а то так и забуду. Интересная вещь совсем недавно приключилась с этим: $('selector')[0].

У заказчика несколько машин, одни работают под XP SP3, есть и семерки и одна под win 8.1.

Возникла проблема - на одной из машин работающей под XP SP3 не загружаются файлы MS Office. Перед загрузкой клиент проверяет файл на разрешенный к загрузке тип (чисто сервис, дабы файлы). В реальности вывод ошибок сервера заблокирован и разрешен только в режиме отладки. JS-сценарий сжат.

Спрашиваю, что в этом случае выдает браузер? Ответ - Ошибка. Зная что такого сообщения нет в коде, уточняю, что за ошибка. Ответ - Не разрешенный для загрузки тип файла. Это ближе к телу.

И это только на одной машине происходит. Гадания и предположения, да еще на большие расстояния пользы не принесли, поэтому отдаю ему неупакованный JS со вставленными в предполагаемых проблемных местах вставках простых, чтобы он мне мог сообщать их, а я знал по ним узкое место.

Вот тут и началось самое смешное - теперь браузер (любой) точно выдавал ошибку на строку в который и было получение DOM - $('selector')[0], не завершенный литерал, и хоть умри. А вот $('selector').get(0) без проблем. Но тогда почему это работает в сжатом JS!? :)

После удалось узнать, что причиной является то, что JS на этой машине типы файлов MS Office получить не может, то есть files[n].type есть пустая строка. И именно только такие файлы, с остальными любыми проблем нет. Почему, так и не удалось выяснить, не имея машины под рукою "лечить" на расстоянии могут только кашпировские и т.п. :)

рони 27.10.2015 21:08

laimas,
может проверку добавить if($('selector').length) ... и да замечал разницу с использованием min.js, до причины не дошёл ... просто ставил несжатую версию

рони 27.10.2015 21:11

laimas,
вот что выдал лог
[["01", "02"], ["05", "06"], ["03", "04"], ["07", "08"], ["05", "06"], ["09", "10"], ["07", "08"], ["11", "12"]]
вроде нужно так:
[[[1, 2], [5, 6]], [[3, 4], [7, 8]], [[9, 10], [13, 14]], [[11, 12], [15, 16]]]

laimas 27.10.2015 21:43

Цитата:

Сообщение от рони
да замечал разницу с использованием min.js

Нет, я не о JQ сжатой говорю, а о моем сценарии - сжатый он работает и на проблемной машине, а вот несжатый ругается на эту строку. Я конечно давал ему и "инструкции" - найди "то-то" и замени "на"... Сначала подумал, что это следствие того, что он где-то допустил при этом ошибку. Сперва просил его показать мне кусочки где изменял, вроде бы нет, затем уже весь файл мне вернуть распакованный с его изменениями - нет ошибок, но работать на проблемной машине с $('selector')[0] ни в какую не хочет, ошибка. Но в сжатом то файле ничего не меняется, все то же - $('selector')[0], вот что интересно. :) А сам $('selector') до этого действия гарантировано есть.

Цитата:

Сообщение от рони
вот что выдал лог

Ну так какая проблема вложить так как требуется? Я писал не для того чтобы как надо, а на вопрос как получить срезы :)

рони 27.10.2015 22:07

Цитата:

Сообщение от laimas
Ну так какая проблема вложить так как требуется?

если это просто, может покажешь как? :)

laimas 27.10.2015 22:35

Цитата:

Сообщение от рони
если это просто, может покажешь как?

b.push([a[i].slice(0, s), a[i+1].slice(0, s)], [a[i].slice(s), a[i+1].slice(s)])
//[[["01", "02"], ["05", "06"]], [["03", "04"], ["07", "08"]], [["05", "06"], ["09", "10"]], [["07", "08"], ["11", "12"]]] в консоли, или не то?

laimas 27.10.2015 22:38

А, есть ошибка, смещение не проверяется, ну это тоже поправимо.
А я сперва даже не обратил внимание на выделенное красным :)


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