Логическая дизъюнкция отмеченного флажка в Javascript

0

Есть ли способ сделать эту работу?

У меня есть 4 флажка в диалоговом окне jquery, и каждый флажок содержит код base64url.
Закрыв диалоговое окно, я бы хотел получить новый код base64url.

Это то, что я хочу сделать.

  1. поиск отмеченного флажка
    (например, выберите Layer1, Layer2 и Layer3)

  2. конвертировать каждое значение из base64url в десятичное
    (Layer1: 'gAAAAOAAAA' до '320000140000',
    Layer2: '___BAIEI' до '636363636310848',
    Layer3: 'gAAAAAAADA' до '320000000030')

  3. реализовать операцию "ИЛИ" (логическая дизъюнкция)
    (1-й десятичный номер каждого уровня равен 32,63,32, поэтому после операции OR это 63.)

  4. конвертировать окончательное значение из десятичного в base64url
    (Layer (final): '6363636363150878' to '___PAIHI')

Я сделал первый шаг следующим образом.

selected = [
 'gAAAAOAAAA',//Layer1
 '_____BAIEI',//Layer2
 'gAAAAAAADA',//Layer3
 'H-AAAgAEAA',//Layer4
];

$("#dialog").dialog({
 autoOpen: false,
 modal: true,
 minWidth: 450,
 buttons:{
  "OK": function(){
   // search for checked checkboxes
   var checkList = [];
   $('[class="layer"]:checked').map(function(){
    var layerID = parseInt($(this).attr('id'));
    var txt2 = selected[layerID];
    checkList.push(txt2);
   });

Может ли кто-нибудь помочь мне со следующими шагами?
Спасибо за ваше время.

Теги:
checkbox

1 ответ

1
Лучший ответ

Я реализовал большую часть того, что вам нужно здесь.

var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';

function base64decode(str) {
    var bytes = [];

    for (var i = 0; i < str.length; i++) {
        bytes.push(alphabet.indexOf(str.charAt(i)));
    }

    return bytes;
}

function base64encode(bytes) {
    var str = '';

    for (var i = 0; i < bytes.length; i++) {
        str += alphabet.charAt(bytes[i]);
    }

    return str;
}

$('input').click(
    function () {
        var values = [];
        var result = [];

        $('input:checked').each(
            function (_, el) { values.push(base64decode($(el).data('val'))); }
        );

        var result = [];

        if (values.length > 0) {
            for (var i = 0; i < values[0].length; i++) {
                result.push(
                    values.reduce(
                        function (a, b) {
                            return a | b[i];
                        },
                        0
                    )
                );
            }
        }

        $('#result').text(base64encode(result));
    }
);

В стороне, я храню кодированные Base64 данные внутри атрибута данных в каждом флажке, а не в отдельном массиве.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню