请参阅:
http://jsfiddle.net/MasterOfKitties/v7xbu/7/
/*This is the desired behavior*/
/*var A = [1, 2, 3]*/
/*var B = "hello", [1, 2, 3],
"hello", [2, 3, 2],
"hello", [1, 5, 1]]*/
var A = new Array();
var B = new Array();
function fnMakeArray()
{
var strTemp;
var arrTemp = new Array();
strTemp = parseInt(window.prompt("Enter a number until you hit cancel",""));
while (strTemp>0)
{
arrTemp.push(strTemp);
strTemp = parseInt(window.prompt("Enter a number until you hit cancel",""));
}
A[0] = "hello";
A[1] = arrTemp;
alert(A);
}
function fnReplicateArray()
{
B.push(A);
fnDisBArray();
alert(B);
}
function fnDisBArray()
{
var strTemp;
for(var x = 0; x<B.length;x++)
{
strTemp += "<P>" + B[x] + "</p>"
}
document.getElementById('parse').innerHTML = strTemp ;
}
出于某种原因,当试图显示B数组时,它会输出undefined。此外,它似乎没有正确地增加锯齿状数组,因为即使正在排列b [1]或b [2]元素,b [0]元素也开始发生根本变化。
任何帮助?发生了什么事?
答案 0 :(得分:2)
您必须使用值初始化strTemp
。
像
var strTemp = "";
而不是
var strTemp;
在你的情况下。
当行
strTemp += "<P>" + B[x] + "</p>"
第一次执行strTemp
是undefined
所以它转换为字符串undefined
并附加在开头
答案 1 :(得分:1)
你的函数没有“复制”/复制A数组,它只是将A的引用推送到B.我相信你想要:
B = A.slice(0);
现在,您似乎还有另一个问题:如果您输入例如10和11进入提示,你得到这个数组的结尾:
[
"hello",
[
10,
11
]
]
我怀疑这不是你想要的。你能解释一下你真正想要实现的目标吗?