实际上我想出了如何转换对象或数组中的所有项目。 让我告诉你我的方式:
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?"]]
};
我的对象是一个命名数据。这是我的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(),但它使用常规数组或具有out dimention的对象。 有没有简单的方法来做到这一点,或者我应该一直使用这种方式:) 感谢Advance。
答案 0 :(得分:2)
我会寻找递归解决方案:
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;
}
这将修改对象。
虽然可以说我不应该在数组对象上使用for ... in
,但我认为这里的使用是合理的,因为它简化了代码,如果任何(可枚举的)字符串属性在数组上,你就可以了希望他们也更新。过去,for ... 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;
}
但请注意,这是不一个完全安全的功能 - 它会产生有趣的"结果如果传递的对象不是普通数据,因为它没有深度克隆所有内容。
答案 1 :(得分:1)
@ Alnitak答案的替代方案,您可以递归使用array.reduce
array.map
。
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?"]]
};
var output = Object.keys(data).reduce(function(p,c){
p[c] = btoaArray(data[c]);
return p;
}, {});
function btoaArray(arr){
return arr.map(function(item){
return Array.isArray(item) ? btoaArray(item) : btoa(item)
})
}
console.log(output)

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?"]]
};
var output = Object.keys(data).reduce((p,c)=>(p[c] = btoaArray(data[c]), p), {});
function btoaArray(arr){
return arr.map((item) => Array.isArray(item) ? btoaArray(item) : btoa(item))
}
console.log(output)