Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用base64转换所有数组/对象_Javascript_Arrays_Object_Multidimensional Array_Base64 - Fatal编程技术网

Javascript 如何使用base64转换所有数组/对象

Javascript 如何使用base64转换所有数组/对象,javascript,arrays,object,multidimensional-array,base64,Javascript,Arrays,Object,Multidimensional Array,Base64,实际上,我知道如何转换对象或数组中的所有项。 让我给你指路: var copyData = {}; var data = { "1":[["input","Was spielt Jakob gern?"],["input sag alt",["Jakob", "Er", " spielt nicht gern Basketball."]]], "2":[["input alt",["Lena", "Sie", " chattet gern."]],["input

实际上,我知道如何转换对象或数组中的所有项。 让我给你指路:

var copyData = {};
var data = {
        "1":[["input","Was spielt Jakob gern?"],["input sag alt",["Jakob", "Er", " spielt nicht gern Basketball."]]],
        "2":[["input alt",["Lena", "Sie", " chattet gern."]],["input sag","Was macht Lena nicht gern?"]],
        "3":[["input alt",["Meike", "Sie", " sieht gern fern."]],["input sag","Was macht Meike nicht gern?"]],
        "4":[["input","Was spielt Tim gern?"],["input sag alt",["Tim", "Er", " spielt nicht gern Fußball."]]],
        "5":[["input","Was spielt Simon gern?"],["input sag","Was spielt Simon nicht gern?"]],
        "6":[["input alt",["Melanie", "Sie", " tanzt gern Hip Hop."]],["input sag","Was tanzt Melanie nicht gern?"]]
    };
我的对象是名为data的对象。下面是我的for循环,用于将此对象转换为另一个对象,并对每个元素进行编码

for(var i in data){
    copyData[i] = [];
    for(var j in data[i]){
        copyData[i][j] = [];
        for(var g in data[i][j]){
            if(typeof data[i][j][g] == "string"){
                copyData[i][j][g] = btoa(data[i][j][g]);
            } else {
                copyData[i][j][g] = [];
                for(var b in data[i][j][g]){
                    copyData[i][j][g][b] = btoa(data[i][j][g][b]);
                }
            }
        }
    }
}
如果你想控制copyData对象,你可以使用:

console.debug(JSON.stringify(dd));
结果是:

var copyData = {
    "1":[["aW5wdXQ=","V2FzIHNwaWVsdCBKYWtvYiBnZXJuPw=="],["aW5wdXQgc2FnIGFsdA==",["SmFrb2I=","RXI=","IHNwaWVsdCBuaWNodCBnZXJuIEJhc2tldGJhbGwu"]]],
    "2":[["aW5wdXQgYWx0",["TGVuYQ==","U2ll","IGNoYXR0ZXQgZ2Vybi4="]],["aW5wdXQgc2Fn","V2FzIG1hY2h0IExlbmEgbmljaHQgZ2Vybj8="]],
    "3":[["aW5wdXQgYWx0",["TWVpa2U=","U2ll","IHNpZWh0IGdlcm4gZmVybi4="]],["aW5wdXQgc2Fn","V2FzIG1hY2h0IE1laWtlIG5pY2h0IGdlcm4/"]],
    "4":[["aW5wdXQ=","V2FzIHNwaWVsdCBUaW0gZ2Vybj8="],["aW5wdXQgc2FnIGFsdA==",["VGlt","RXI=","IHNwaWVsdCBuaWNodCBnZXJuIEZ132JhbGwu"]]],
    "5":[["aW5wdXQ=","V2FzIHNwaWVsdCBTaW1vbiBnZXJuPw=="],["aW5wdXQgc2Fn","V2FzIHNwaWVsdCBTaW1vbiBuaWNodCBnZXJuPw=="]],
    "6":[["aW5wdXQgYWx0",["TWVsYW5pZQ==","U2ll","IHRhbnp0IGdlcm4gSGlwIEhvcC4="]],["aW5wdXQgc2Fn","V2FzIHRhbnp0IE1lbGFuaWUgbmljaHQgZ2Vybj8="]]
};
到目前为止一切正常。我的问题是:是否有任何阵列原型可以更轻松地完成这项工作。我查找Array.prototype.map(),但它使用常规数组或没有维度的对象。 有没有简单的方法可以做到这一点,或者我应该一直使用这种方法:)
感谢您的帮助。

我想寻找一个递归解决方案:

function encodeString(obj) {
    let type = typeof obj;
    if (type === 'object') {
        for (let key in obj) {
             obj[key] = encodeString(obj[key]);
        }
    } else if (type === 'string') {
        obj = btoa(obj);
    }
    return obj;
}
这将在位修改对象

虽然可以说人们不应该使用
来。。。在数组对象上的
中,我认为这里的使用是合理的,因为它简化了代码,如果数组上有任何(可枚举的)字符串属性,您也希望更新它们。过去的情况是,
对于。。。in
还将枚举数组的
.length
属性,但在现代浏览器中不再是这种情况

如果您想要一个不就地修改的版本:

function encodeString(obj) {
    let type = typeof obj;
    if (type === 'object') {
        let tmp = Array.isArray(obj) ? [] : {};
        for (let key in obj) {
             tmp[key] = encodeString(obj[key]);
        }
        return tmp;
    } else if (type === 'string') {
        return btoa(obj);
    }
    return obj;
}

但请注意,这不是一个完全安全的函数-如果传递的对象不是纯数据,它将产生“有趣的”结果,因为它不会深度克隆所有内容。

我将寻找递归解决方案:

function encodeString(obj) {
    let type = typeof obj;
    if (type === 'object') {
        for (let key in obj) {
             obj[key] = encodeString(obj[key]);
        }
    } else if (type === 'string') {
        obj = btoa(obj);
    }
    return obj;
}
这将在位修改对象

虽然可以说人们不应该使用
来。。。在数组对象上的
中,我认为这里的使用是合理的,因为它简化了代码,如果数组上有任何(可枚举的)字符串属性,您也希望更新它们。过去的情况是,
对于。。。in
还将枚举数组的
.length
属性,但在现代浏览器中不再是这种情况

如果您想要一个不就地修改的版本:

function encodeString(obj) {
    let type = typeof obj;
    if (type === 'object') {
        let tmp = Array.isArray(obj) ? [] : {};
        for (let key in obj) {
             tmp[key] = encodeString(obj[key]);
        }
        return tmp;
    } else if (type === 'string') {
        return btoa(obj);
    }
    return obj;
}
但请注意,这不是一个完全安全的函数-如果传递的对象不是纯数据,它将产生“有趣的”结果,因为它不会深度克隆所有内容。

除了@的答案,您可以使用
array.reduce
array.map
递归

var数据={
“1”:[“输入”,“斯皮尔特·雅各布·格恩是谁?”],[“输入弧垂高度”,“雅各布”,“呃”,“斯皮尔特·尼希特·格恩篮球。”]],
“2”:[“输入alt”,“Lena”,“Sie”,“Chatter gern.”],[“输入sag”,“macht Lena nicht gern?”],
“3”:[“输入alt”]、[“Meike”、“Sie”、“sieht gern fern.”]、[“输入弧垂”、“macht Meike nicht gern?”],
“4”:[“输入”,“斯皮尔特·蒂姆·格恩是吗?”],[“输入弧垂高度”,“蒂姆”,“呃”,“斯皮尔特·尼希特·格恩·富尔。”],
“5”:[“输入”,“斯皮尔特·西蒙·格恩是吗?”],[“输入凹陷”,“斯皮尔特·西蒙·尼希特·格恩是吗?”],
“6”:[“输入alt”,“Melanie”,“Sie”,“tanzt gern Hip Hop.”],[“输入sag”,“tanzt Melanie nicht gern吗?”]]
};
var输出=Object.keys(数据).reduce(函数(p,c){
p[c]=btoaArray(数据[c]);
返回p;
}, {});
函数btoaArray(arr){
返回arr.map(函数(项){
返回数组.isArray(项目)?btoaArray(项目):btoa(项目)
})
}
console.log(output)
除了@的答案之外,您还可以使用
array.reduce
array.map递归使用

var数据={
“1”:[“输入”,“斯皮尔特·雅各布·格恩是谁?”],[“输入弧垂高度”,“雅各布”,“呃”,“斯皮尔特·尼希特·格恩篮球。”]],
“2”:[“输入alt”,“Lena”,“Sie”,“Chatter gern.”],[“输入sag”,“macht Lena nicht gern?”],
“3”:[“输入alt”]、[“Meike”、“Sie”、“sieht gern fern.”]、[“输入弧垂”、“macht Meike nicht gern?”],
“4”:[“输入”,“斯皮尔特·蒂姆·格恩是吗?”],[“输入弧垂高度”,“蒂姆”,“呃”,“斯皮尔特·尼希特·格恩·富尔。”],
“5”:[“输入”,“斯皮尔特·西蒙·格恩是吗?”],[“输入凹陷”,“斯皮尔特·西蒙·尼希特·格恩是吗?”],
“6”:[“输入alt”,“Melanie”,“Sie”,“tanzt gern Hip Hop.”],[“输入sag”,“tanzt Melanie nicht gern吗?”]]
};
var输出=Object.keys(数据).reduce(函数(p,c){
p[c]=btoaArray(数据[c]);
返回p;
}, {});
函数btoaArray(arr){
返回arr.map(函数(项){
返回数组.isArray(项目)?btoaArray(项目):btoa(项目)
})
}


console.log(output)
@Rajesh实际上我认为这是其中一种可能合适的情况-它会自动转换数组中可能存在的任何命名属性以及数字索引。我必须问-你到底为什么要这样做?您好@Rajesh thx,请回答。我从来没有说过这是最好或最好的方法。我只是说这是我的方式:)你好@Alnitak,我需要它,因为用户看不到问题的直接答案:)@Rajesh在现代浏览器中
。长度
不是可枚举的property@Rajesh实际上,我认为这是其中一种可能合适的情况——它会自动转换数组中可能存在的任何命名属性以及数字索引问-你到底为什么要这样做?你好@Rajesh thx,请回复。我从来没有说过这是最好或最好的方法。我只是说这是我的方式:)你好@Alnitak,我需要它,因为用户看不到问题的直接答案:)@Rajesh在现代浏览器中
。长度
不是一个可枚举的属性我相信这个函数不能转换我所有的数据?你能试着转换我在这页顶部写的数据变量吗?@HalilÇakar我会再测试一次,但当我尝试它时它似乎工作了。我只是尝试一下,它工作得很好。谢谢@alnitake因为这是一个非常通用的代码,我建议使用
temp
变量并操作并返回它。在其他情况下可能不需要重写
obj
。@Rajesh通常更喜欢这样,但这会使代码变得复杂一些,因为
temp
变量的初始值有时是
[]
,有时是
{}
,我相信这个函数不能转换我所有的数据?你能试着把数据转换成数据吗