在javascript中将字符串解码为数组值

时间:2014-09-08 13:44:05

标签: javascript arrays string decoding

我有2个字符串和一些字符。其中一个是“捣碎”字符,另一个是带有某种意义的有序字符。例如:

wvEr2JmJUs2JRr:7Fob9WIB8mSOA?w0s2E:7-f/-G/N-.f7jN:Mi:.CDfGX7tn!
Identification: zpE?bkHlfYS-hIDate: 07/08/2057 12:34:56.789 CGT

正如您所看到的那样 - 第一个具有相同的符号,对于第二个中的等号,它们是相同的。 并且任务是 - 从它们创建某种类型的字母表,因为我有第三个字符串必须被“解码”。 (wvEr2JmJUs2JRr:7a1AJvvHvAmRRWsxWsFAvJvAJAaoE88A2 s2AxJ1 290s2E:?7-F / -G / N-.f7jN:MC:ifDCGN7tn)。 这里棘手的部分是 - 如果我非常确定前两个字符串它们就像许多字符一样绝对相同,那么关于新字符串 - 是完全不同的符号数,但它们包含在“字母“

这是我目前创建“字母”的代码:

var enc = "wvEr2JmJUs2JRr:7Fob9WIB8mSOA?w0s2E:7-f/-G/N-.f7jN:Mi:.CDfGX7tn!";

var dec = "Identification: zpE?bkHlfYS-hIDate: 07/08/2057 12:34:56.789 CGT";

var newenc = "wvEr2JmJUs2JRr:7a1AJvvHvAmRRWsxWsFAvJvAJAaoE88A2?s2AxJ1?290s2E:7-f/-G/N-.f7jN:MC:ifDCGN7tn!";

var myenc = {};

var mynewenc = {};

for (i = 0; i < enc.length; i+=1) {
var encoded = new Array(enc[i]);
var decoded = new Array(dec[i]);


myenc[enc[i]] = dec[i];
};

console.log(myenc);

现在 - 我如何使用这个“字母表”解码新的字符串?

3 个答案:

答案 0 :(得分:0)

这是你可以接近它的一种方式(我理解这个问题):

// Create your dictionary
var dict = {};

var enc = "wvEr2JmJUs2JRr:7Fob9WIB8mSOA?w0s2E:7-f/-G/N-.f7jN:Mi:.CDfGX7tn!".split('');
var dec = "Identification: zpE?bkHlfYS-hIDate: 07/08/2057 12:34:56.789 CGT".split('');

// Populate your dictionary
for (var i = 0; i < enc.length; i++) {
  dict[enc[i]] = dec[i];
}

// You can use your dictionary like this
var newenc = "wvEr2JmJUs2JRr:7a1AJvvHvAmRRWsxWsFAvJvAJAaoE88A2?s2AxJ1?290s2E:7-f/-G/N-.f7jN:MC:ifDCGN7tn!".split('');

// Returns your translated string
newenc.map(function(e) {
  return dict[e];
}).join('');

但是,对于此方法,您必须处理newenc中未定义的enc中定义的字符(例如T)。我试图尽我所能给出你所描述的情况和规则,希望这有帮助!

答案 1 :(得分:0)

如果我理解得很好,您可以尝试使用此代码。 它在你的enc变量中找到了合适的编码字母,如果找到了这个字母,它就会用你的dec变量中的相应字母替换它。

var enc = "wvEr2JmJUs2JRr:7Fob9WIB8mSOA?w0s2E:7-f/-G/N-.f7jN:Mi:.CDfGX7tn!";

var dec = "Identification: zpE?bkHlfYS-hIDate: 07/08/2057 12:34:56.789 CGT";

var newenc = "wvEr2JmJUs2JRr:7a1AJvvHvAmRRWsxWsFAvJvAJAaoE88A2?s2AxJ1?290s2E:7-f/-G/N-.f7jN:MC:ifDCGN7tn!";

for (i = 0; i < newenc.length; i++) {
    for (j = 0; j < enc.length; j++) {
        if (enc[j] == newenc[i])
            newenc[i] = dec[j];
    }
};

console.log(newenc);

最后,你的变量newenc可能包含你的解码字符串。

答案 2 :(得分:0)

var enc = "wvEr2JmJUs2JRr:7Fob9WIB8mSOA?w0s2E:7-f/-G/N-.f7jN:Mi:.CDfGX7tn!";
var dec = "Identification: zpE?bkHlfYS-hIDate: 07/08/2057 12:34:56.789 CGT";

var newenc = "wvEr2JmJUs2JRr:7a1AJvvHvAmRRWsxWsFAvJvAJAaoE88A2?s2AxJ1?290s2E:7-f/-G/N-.f7jN:MC:ifDCGN7tn!";

function make_dictionary(enc, dec){
    o = new Object();
    if(enc.length == dec.length){
        for(i=0; i<enc.length; i++){
            o[enc[i]] = dec[i];
        }
    }
    else{
        console.log('error');
    }
    return o;
}

function translate(newenc, dictionary, fill){
    var newstring = '';
    for(i=0; i<newenc.length; i++){
        if(typeof dictionary[newenc[i]] !== 'undefined'){
            newstring += dictionary[newenc[i]];
        }
        else{
            newstring += fill;
        }

    }
    return newstring;
}

var d = make_dictionary(enc, dec);
console.log(d);
var string = translate(enc, d, '_');
console.log(string);
var string = translate(newenc, d, '_');
console.log(string);