在JavaScript中删除Array Content时的Circumvent引用

时间:2014-07-22 08:53:52

标签: javascript arrays reference

我通过将数组作为日志条目存储在单个数组中来实现简单的日志记录机制。 代码的工作原理如下:

var myarr = new Array();
var secondarr = new Array(4,5,6);
myarr.push(secondarr);
secondarr.length=0;
secondarr.push(5,5,5);
myarr.push(secondarr);
secondarr.length=0;

//check
for(var i = 0; i < myarr.length; i++){
    var str="";
    for(var j = 0; j < myarr[i].length; j++)
        str+=myarr[i][j]+" ";

    console.log(str);
}

我正在创建我的单个数组myarr,其中存储了logentries。 secondarr存储要记录的数据。因为每次我将某些内容记录到myarr时我都不想创建新数组,所以我想将secondarr设置为secondarr.length=0

然而,由于引用,这也会删除myarr中的所有内容!

有没有办法绕过为每个日志创建新数组?当我按secondarr.slice()时,该方法当然有效,但这导致了多个阵列,我试图避免这种情况。

1 个答案:

答案 0 :(得分:1)

将每个secondarr.length=0;替换为secondarr=[];。第一条指令修改length引用的数组的secondarr属性。第二个使得secondarr现在引用一个新的空数组。

在任何情况下,您都必须为要存储的每个logentry创建一个新数组。