Array.prototype.remove=function(dx) {
alert(1111);
   if(isNaN(dx)||dx>this.length){return false;}
   for(var i=0,n=0;i<this.length;i++)
   {
       if(this[i]!=this[dx])
       {
           this[n++]=this[i]
       }
   }
   this.length-=1
}var sort_user = ["张三","李四","王五"];
var group = [1,2,3,1];
var proj = new Array(new Array(), new Array(), new Array(), new Array());
var tmpArray = new Array();
for (var i = 0; i < 4; i++) {
         alert(sort_user);
tmpArray = sort_user;
for (var j = 0; j < group[i]; j++) {
var tmp = parseInt(Math.random() * tmpArray.length);
proj[i][j] = tmpArray[tmp];
alert(tmpArray[tmp]);
tmpArray.remove(tmp);
}
}

我把变量sort_user 的值,赋值给了tmpArray。然后改变tmpArray的值,怎么sort_user的值也被改变了

解决方案 »

  1.   

    test<script language="javascript">
    <!--
    var sort_user = ["张三","李四","王五"];
    var tmpArray = new Array();
    alert("[原 sort_user] "+sort_user);
    tmpArray = sort_user;
    tmpArray.length=1;
    alert("[新 sort_user] "+sort_user);
    //-->
    </script>
      

  2.   

    tmpArray = sort_user;//引用
      

  3.   

    try:
    tmpArray = sort_user;
    ===>
    for (var k=0;k<sort_user.length;k++)tmpArray[k]=sort_user[k]
      

  4.   

    tmpArray = sort_user.slice(0);//值复制
      

  5.   

    javascript中的赋值有两种:
    1、值拷贝;
    2、引用拷贝;
    对于简单数据类型,如number,string等的赋值都是值拷贝,而对于对象类型,如Array,自定义对象等的赋值都是引用拷贝,即只是拷贝了类似于C++中的指针,并不会将对象的所有值拷贝一份,所以如果有需要,数组赋值可以使用楼上的slice实现,自定义对象需要自己实现方法深层拷贝。