<script>
function Array.prototype.clone(){
var tmp=new Array();
for(ob in this)tmp[ob]=this[ob];
return tmp;
}
var array_1 = new Array();
array_1[2] = '1';
array_1[3] = '2';var array_2 = array_1.clone();array_1[0] = 'One';
array_2[0] = 'Two';alert(array_1); //输出的是'Two'
alert(array_2); //输出的是'One'</script>

解决方案 »

  1.   

    先谢谢秋水无恨,我的数组比较繁琐,是一个多维数组:// +-----------------------------------------------------+
    array_1                = new Array();array_1[1]             = new Array();
    array_1[1]['member_1'] = 'value...';
    array_1[1]['member_2'] = 'value...';array_1[2]             = new Array();
    array_1[2]['member_1'] = 'value...';
    array_1[2]['member_2'] = 'value...';
    // +-----------------------------------------------------+这种方式应该如何处理?
      

  2.   

    秋水这样子和下面的事实上没有什么区别,只是把数组1的完全复制过来了,但是imatree (我是一棵树)那样先定义两个数组相等,再改变就……
    <script>var array_1 = new Array();
    var array_2 = new Array();for(i=0;i<array_1.length;i++)
    array_2[i]=array_1[i]array_1[0] = 'One';
    alert(array_1[0]); //输出的是'One'array_2[0] = 'Two';
    alert(array_2[0]); //输出的是'Two'</script>
      

  3.   

    我是通过PHP程序打印的JS数组,在页面中array_1用来记录数据的改动,array_2用来记录array_1的原始状态,以便实现恢复功能。
    因为array_1的数据量太庞大(>100K),所以我不能使用PHP重新打印array_2,也就是说只能用JavaScript将array_1的初始值赋予array_2。
      

  4.   

    如果你是要复制原来的数组,秋水的方法是对的。针对你的多维数组,在函数里面你检测的typeof(数组元素)是否是一个Array对象,是的话,同样将对应的元素写成一个数组,只是要嵌套一下
      

  5.   

    哦,用递归就是了。谢谢!对了,还要请教一个问题,Javascript中检测变量是否是数组的函数如何使用?
      

  6.   

    不明白 imatree (我是一棵树)  的意思,你是说不要array_1与array_2不关联,那就分别定义嘛,搞那么复杂干嘛:就像
     var array_1 = new Array();
     var array_2 = new Array();
    如果这是一个多维数组,就用下面的办法来定义:
     var array_1=new Array();
     array_1[0]=new Array();
     array_1[0][0]=new Array()
       .
       .
       .
     array_1[0][0][0]="value0"
    赋值,就是分开逐个复制,一样好用。
      

  7.   

    东仔: array_1的数据量太庞大(>100K),如果我再重复定义array_2,页面大小就会翻倍。所以必须使用JavaScript来赋值。Javascript中检测变量是否是数组的函数如何使用?你知道吗?
      

  8.   

    想到一个好办法复制原来的数组,不用递归,只用这样子就是了<script>
    var aa=new Array()  //定义一个数组
    aa[0]=123
    aa[1]=new Array()
    aa[1][0]=456
    aa[1][1]=789
    aa[2]="xxx"
    alert(aa)  //赋值完毕
    var bb=new Array()  //定义一个数组bb
    var cc="a"  //定义一个变量
    bb=aa.concat(cc)  //让数组bb追加一个元素,成为一个新的独立数组
    bb.pop()  //再删除数组bb的最后一个元素
    aa[0]="aaa"  //改变数组aa的值
    alert(bb)  //数组bb依然是数组aa的初始化状态
    </script>
      

  9.   

    不过pop()方法要求脚本引擎的版本是5.5,低于5.5的可能就不管用了
      

  10.   

    多谢Bencalie,我又简化了一下,呵呵<script>//初始化数据
    var array_1   = new Array();    //定义一个数组
    array_1[0]    = 123;
    array_1[1]    = new Array();
    array_1[1][0] = 456;
    array_1[1][1] = 789;
    array_1[2]    = "xxx";
    alert(array_1)                  //赋值完毕//赋值数据
    var array_2 = new Array();      //定义一个数组array_2
    array_2     = array_1.concat(); //返回一个新数组//Test
    array_1[0] = "aaa";             //改变数组aa的值
    alert(array_2);                 //数组array_2依然是数组array_1的初始化状态</script>
      

  11.   

    又来问题了!
    我把测试段改成下面的方式,多维数组部分还是会随之更改。
    //Test
    array_1[1][0] = "aaa";
    alert(array_2);
      

  12.   

    这就还是前面说到的按引用的问题了,难道非得使用for循环?
    让我再想想
      

  13.   

    最后还是用Bencalie的concat方法结合递归解决了。
      

  14.   

    是一个N维数组,具体深度根据数据层次来定。JS的数组功能与PHP相比是差很多了。
      

  15.   

    也许VBS好些,VBS至少是可以直接定义多维数组的,不用像JS如此麻烦
      

  16.   

    呵呵......js 的问题我一直很头晕... bc 老大, 多教教我哦...