1. Функция codeFMas изменяет исходный массив, хотя по моему бы не должна
2. Почему tmpArr доступен вне функции?
Примечание: можно было обойтись без eval, но о методе slice() и др. я прочитал только недавно .
CODE:
<script>
function crMass(name,a,b,c,d){ //-размерность массива
eval(name + " = new Array()")
for(var i=-1;i<a;i++){
eval(name+"["+i+"] = new Array()")
for(var i1=-1;i1<b;i1++){
eval(name+"["+i+"]["+i1+"] = new Array()")
for(var i2=-1;i2<=c;i2++){
eval(name+"["+i+"]["+i1+"]["+i2+"] = new Array()")
eval(name+"["+i+"]["+i1+"]["+i2+"] = '"+i+""+i1+""+i2+"'") //debag
for(var i3=-1;i3<d;i3++){
eval(name+"["+i+"]["+i1+"]["+i2+"]["+i3+"] = new Array()")
}
}
}
}
}
function codeFMas(name,x,x1,x2){ //x0=',' ! (x,x1,x2 = '#' '^' '@' или др)
this.tmpArr=eval(name+'.slice()')
for(var i=0;this.tmpArr[i]!=undefined;i++){
for(var i1=0;this.tmpArr[i][i1]!=undefined;i1++){
for(var i2=0;this.tmpArr[i][i1][i2]!=undefined;i2++){
for(var i3=0;this.tmpArr[i][i1][i2][i3]!=undefined;i3++){}
this.tmpArr[i][i1][i2][i3]=x2
}
this.tmpArr[i][i1][i2]=x1
}
this.tmpArr[i][i1]=x
}
return this.tmpArr;
}
function decodeFMas(var1,name,x,x1,x2){ //var1 декодируется в массив name; x,x1,x2 = '#' '^' '@'
a1='';a2='';
eval(name + " = new Array()")
eval(name + " = '"+var1+"'.split('"+x+",')")
for(var i=0;eval(name + "["+i+"]")!=undefined;i++){
if(eval(name + "["+i+"]").indexOf(x1)!=-1){
a1="["+'i1'+"]"
tmpp=eval(name+"["+i+"]"); document.write(tmpp+'<BR>')
eval(name+"["+i+"] = new Array()")
eval(name+"["+i+"]=tmpp.substring(0,tmpp.lastIndexOf(',')).split('"+x1+",')")
}
for(var i1=0;eval(name+"["+i+"]"+a1)!=undefined;i1++){
if(eval(name+"["+i+"]"+a1).indexOf(x2)!=-1){
a2="["+'i2'+"]";
tmpp=eval(name+"["+i+"]"+a1)
eval(name+"["+i+"]"+a1+" = new Array()")
eval(name+"["+i+"]"+a1+" = tmpp.substring(0,tmpp.lastIndexOf(',')).split('"+x2+",')")
}
for(var i1=0;eval(name+"["+i+"]"+a1+a2)!=undefined;i1++){
if(eval(name+"["+i+"]"+a1+a2).indexOf(',')!=-1){
tmpp=eval(name+"["+i+"]"+a1+a2)
eval(name+"["+i+"]"+a1+a2+" = new Array()")
eval(name+"["+i+"]"+a1+a2+" = tmpp.substring(0,tmpp.lastIndexOf(',')).split(',')")
}}
}
}
}
crMass('aa',3,3,6)
//aa[2]='s';aa[0][0][0]=0;aa[0][0][1]=1;aa[1][0]=10;aa[1][2][2]=21
document.write('массив<a style="position:absolute;left:160px">'+aa+'</a><BR>')
aa1=codeFMas('aa','#','^','@')
document.write('измененный массив<a style="position:absolute;left:160px">'+aa+'</a><BR>')
document.write('временный массив<a style="position:absolute;left:160px">'+tmpArr+'</a><BR>')
document.write('строка<a style="position:absolute;left:160px">'+aa1+'</a><BR>')
decodeFMas(aa1,'aa2','#','^','@')
document.write('восстановлен массив<a style="position:absolute;left:160px">'+aa2+'</a><BR>')
document.write('<BR><BR>'+aa2[2])
document.write('<BR><BR>'+aa2[2][2][0])
</script>
<script>
function crMass(name,a,b,c,d){ //-размерность массива
eval(name + " = new Array()")
for(var i=-1;i<a;i++){
eval(name+"["+i+"] = new Array()")
for(var i1=-1;i1<b;i1++){
eval(name+"["+i+"]["+i1+"] = new Array()")
for(var i2=-1;i2<=c;i2++){
eval(name+"["+i+"]["+i1+"]["+i2+"] = new Array()")
eval(name+"["+i+"]["+i1+"]["+i2+"] = '"+i+""+i1+""+i2+"'") //debag
for(var i3=-1;i3<d;i3++){
eval(name+"["+i+"]["+i1+"]["+i2+"]["+i3+"] = new Array()")
}
}
}
}
}
function codeFMas(name,x,x1,x2){ //x0=',' ! (x,x1,x2 = '#' '^' '@' или др)
this.tmpArr=eval(name+'.slice()')
for(var i=0;this.tmpArr[i]!=undefined;i++){
for(var i1=0;this.tmpArr[i][i1]!=undefined;i1++){
for(var i2=0;this.tmpArr[i][i1][i2]!=undefined;i2++){
for(var i3=0;this.tmpArr[i][i1][i2][i3]!=undefined;i3++){}
this.tmpArr[i][i1][i2][i3]=x2
}
this.tmpArr[i][i1][i2]=x1
}
this.tmpArr[i][i1]=x
}
return this.tmpArr;
}
function decodeFMas(var1,name,x,x1,x2){ //var1 декодируется в массив name; x,x1,x2 = '#' '^' '@'
a1='';a2='';
eval(name + " = new Array()")
eval(name + " = '"+var1+"'.split('"+x+",')")
for(var i=0;eval(name + "["+i+"]")!=undefined;i++){
if(eval(name + "["+i+"]").indexOf(x1)!=-1){
a1="["+'i1'+"]"
tmpp=eval(name+"["+i+"]"); document.write(tmpp+'<BR>')
eval(name+"["+i+"] = new Array()")
eval(name+"["+i+"]=tmpp.substring(0,tmpp.lastIndexOf(',')).split('"+x1+",')")
}
for(var i1=0;eval(name+"["+i+"]"+a1)!=undefined;i1++){
if(eval(name+"["+i+"]"+a1).indexOf(x2)!=-1){
a2="["+'i2'+"]";
tmpp=eval(name+"["+i+"]"+a1)
eval(name+"["+i+"]"+a1+" = new Array()")
eval(name+"["+i+"]"+a1+" = tmpp.substring(0,tmpp.lastIndexOf(',')).split('"+x2+",')")
}
for(var i1=0;eval(name+"["+i+"]"+a1+a2)!=undefined;i1++){
if(eval(name+"["+i+"]"+a1+a2).indexOf(',')!=-1){
tmpp=eval(name+"["+i+"]"+a1+a2)
eval(name+"["+i+"]"+a1+a2+" = new Array()")
eval(name+"["+i+"]"+a1+a2+" = tmpp.substring(0,tmpp.lastIndexOf(',')).split(',')")
}}
}
}
}
crMass('aa',3,3,6)
//aa[2]='s';aa[0][0][0]=0;aa[0][0][1]=1;aa[1][0]=10;aa[1][2][2]=21
document.write('массив<a style="position:absolute;left:160px">'+aa+'</a><BR>')
aa1=codeFMas('aa','#','^','@')
document.write('измененный массив<a style="position:absolute;left:160px">'+aa+'</a><BR>')
document.write('временный массив<a style="position:absolute;left:160px">'+tmpArr+'</a><BR>')
document.write('строка<a style="position:absolute;left:160px">'+aa1+'</a><BR>')
decodeFMas(aa1,'aa2','#','^','@')
document.write('восстановлен массив<a style="position:absolute;left:160px">'+aa2+'</a><BR>')
document.write('<BR><BR>'+aa2[2])
document.write('<BR><BR>'+aa2[2][2][0])
</script>
P.S.: может быть можно это сделать как-то проще и для массивов любой размерности?