jquery multitype Jagged数组表现奇怪

时间:2013-09-27 18:15:38

标签: javascript jquery arrays multidimensional-array

请参阅:

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]元素也开始发生根本变化。

任何帮助?发生了什么事?

2 个答案:

答案 0 :(得分:2)

您必须使用值初始化strTemp

var strTemp = "";

而不是

var strTemp;

在你的情况下。

当行

 strTemp += "<P>" + B[x] + "</p>"

第一次执行strTempundefined 所以它转换为字符串undefined并附加在开头

请参阅working fiddle

答案 1 :(得分:1)

你的函数没有“复制”/复制A数组,它只是将A的引用推送到B.我相信你想要:

B = A.slice(0); 

现在,您似乎还有另一个问题:如果您输入例如10和11进入提示,你得到这个数组的结尾:

[
    "hello",
    [
        10,
        11
    ]
]

我怀疑这不是你想要的。你能解释一下你真正想要实现的目标吗?