【问题标题】:jquery multitype Jagged array behaving strangelyjquery multitype 锯齿状数组表现异常
【发布时间】:2013-09-27 18:15:38
【问题描述】:

请参考:

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

有什么帮助吗?怎么回事?

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array


    【解决方案1】:

    你必须用一个值初始化strTemp

    喜欢

    var strTemp = "";
    

    而不是

    var strTemp;
    

    在你的情况下。

    当行

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

    第一次执行strTempundefined 因此将其转换为字符串为undefined 并在开头附加

    working fiddle

    【讨论】:

      【解决方案2】:

      您的函数不会“复制”/复制 A 数组,它只是将对 A 的引用推入 B。我相信您想要:

      B = A.slice(0); 
      

      现在,您似乎遇到了另一个问题:如果您输入例如10 和 11 进入提示,最后得到这个数组:

      [
          "hello",
          [
              10,
              11
          ]
      ]
      

      我怀疑这不是您真正想要的。你能解释一下你真正想要完成的事情吗?

      【讨论】:

      • 这是朝着正确方向迈出的一步。但是,为什么我会在代码的显示屏前看到未定义的内容?
      • 因为您必须将 strTmp 初始化为“”,正如 mithunsatheesh 所说。否则,当您尝试将 undefined 与另一个字符串连接时,您会得到字符串“未定义”。
      • 我实际上是在尝试存储用于动态创建菜单的信息,例如:ITEM(NAME,TYPE,PRICE,[ingredients1,ingredients2,etc]),然后将其全部存储到另一个数组中,称为菜单。因此 MENU[0] 将包含特定项目的所有信息,而 MENU[1] 将包含另一种类型的所有信息。这基本上只是一个复杂的锯齿状数组,但是当简单的锯齿状数组抛出我时,它就很奇怪。
      • 是的,确实如此。谢谢!我也在这里充分修复了我的小提琴:jsfiddle.net/MasterOfKitties/v7xbu/9 谢谢大家!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 2019-11-17
      • 2015-09-23
      • 2013-06-21
      • 2015-07-01
      • 2015-05-06
      相关资源
      最近更新 更多