Javascript 为什么这个锯齿状数组不能正确存储?

Javascript 为什么这个锯齿状数组不能正确存储?,javascript,jquery,arrays,Javascript,Jquery,Arrays,为什么将数组的其他元素存储到数组中的调用不能正常工作?正如在存储完第一个元素后,每当我尝试单击ShowArray时所看到的,它似乎会继续并覆盖arrMenu的所有早期元素 操作代码如下: function fnPopArray() { arrItem[0] = document.getElementById('idName').value; arrItem[1] = document.getElementById('idType').value; arrItem

为什么将数组的其他元素存储到数组中的调用不能正常工作?正如在存储完第一个元素后,每当我尝试单击ShowArray时所看到的,它似乎会继续并覆盖arrMenu的所有早期元素

操作代码如下:

function fnPopArray()
    {
    arrItem[0] = document.getElementById('idName').value;
    arrItem[1] = document.getElementById('idType').value;
    arrItem[2] = document.getElementById('idPrice').value;
    arrItem[3] = document.getElementById('idCalories').value;
        /*We should generate the HTML string here. */
    var strHTML =     "<b><p>Name:</b>" +  arrItem[0]+"</p><p>Type:"+ arrItem[1]+"</p><p>Price:"+arrItem[2]+"</p><p>Calories:"+ arrItem[3]+"</p>";

        document.getElementById("idResults").innerHTML = strHTML;
        $("#idResults").show();     
       /*now we generate the ingredients string here */
        var strIngHTML = "";
        for(var i=0;i<arrItem[4].length;i++)
            {
             strIngHTML =  strIngHTML + arrItem[4][i]+"<br/>";  
            }
        strHTML = "<b>Ingredients</b><br/>"+strIngHTML;
        /*We display it in the second div we have for ingredients */
        document.getElementById("idIngredients").innerHTML = strHTML;
       $("#idIngredients").show();

     /*So we have populated and displayed the contents of our item. Now populate it into our menu object.*/

        arrMenu[intMenu]=arrItem;
        intMenu = intMenu+1;
    }
函数fnPopArray()
{
arrItem[0]=document.getElementById('idName')。值;
arrItem[1]=document.getElementById('idType')。值;
arrItem[2]=document.getElementById('idPrice').value;
arrItem[3]=document.getElementById('idCarries')。值;
/*我们应该在这里生成HTML字符串*/
var strHTML=“名称:“+arrItem[0]+”

类型:“+arrItem[1]+”

价格:“+arrItem[2]+”

卡路里:“+arrItem[3]+”

”; document.getElementById(“idResults”).innerHTML=strHTML; $(“#idResults”).show(); /*现在我们在这里生成配料字符串*/ var strIngHTML=“”;
对于(var i=0;i当您在菜单中按项时,请复制数组的值,而不是按全局对象

arrTemp = fnPopArray();
arrMenu.push(arrTemp.splice(0));
alert("After the addition " + arrMenu);

最终,这一问题在这里得到了解决:


正如我所怀疑的,推送行为异常,进而破坏了我制作数组的尝试。

intMenu是如何/何时初始化的?检查您的控制台。
arrItem[4]
未定义,因此
arrItem[4]。length
在第65行抛出一个错误。它位于代码的最顶层,有很多注释。arrItem[4]是在另一个函数中调用的,因此它不应该是未定义的,尽管它应该可以工作,即使它是空的。我发现了另一个问题:显然,当我将它设置为arrMenu.push(arrItem)时,它实际上不只是将项作为元素插入数组中,而是似乎添加了指针。随着arrItem的更改,arrMenu[0]自动更改。我不知道为什么-如何修复?请看:感觉我的arrMenu在到达其推送代码之前实际上正在更改。我不明白为什么,真的。有什么想法吗?你可以在这里看到它,它甚至在函数的代码中也在更改。好的,我看到了你的问题。当你将arrItem推到arrMenu时,它总是一样的对象您只需更新值。因此,当您更改值时,您会更改一个对象的值,并再次将此对象推送到您的菜单。您每次都必须创建一个新的项目。如果我是您,我将创建一个项目对象,而不是使用数组。它将更易于阅读和使用。