如何复制一个数组?原来的数组改动不影响复制的那个数组

ronanljy2 2007-04-27 11:20:29
在一个页面用showModalDialog打开对话框
returnArray = window.showModalDialog("a.jsp",window,"dialogHeight:700px;dialogWidth:910px;resizable:yes;status:no;help:no;");

打开的页面,把原页面的一个数组赋值给一个临时变量
var returna = dialogArguments.arr_obj; //用于原样返回
如果点原样返回按钮,就返回returna;
但是如果我对arr_obj有修改,返回的returna也是修改过的,如何返回一个没修改过的returna?
...全文
475 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
btbtd 2007-05-21
  • 打赏
  • 举报
回复
看看, 最简单的 字串数组 复制方法...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- DW6 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>shawl.qiu template</title>
<script type="text/javascript">
//<![CDATA[
var ar1 = [1,2,3];

var iCount = ar1.length;

var sDelimiter = "SDF@#$SDFASSFad";

var sAr1 = ar1.join(sDelimiter)

var ar2 = sAr1.split(sDelimiter);

defaultStatus =
"ar1: "+ar1
+" ar2: "+ar2
;

for(var i=0; i<10; i++)
{
var iIndex = ar2.length;
ar2[iIndex] = iIndex;
}

defaultStatus +=
" ar1: "+ar1
+" ar2: "+ar2
;
//]]>
</script>
</head>
<body>

</body>
</html>


不过对付对象是不行滴, 这个我目前没需要, 就不整了...
gzdiablo 2007-05-21
  • 打赏
  • 举报
回复
Array.prototype.each = function(closure) {
return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];
};
//这种递归的方法效率低 而且内存占用很厉害 为什么用这种写法?

Array.prototype.Each = function(closure) {var r=new Array();
for(var i=0,l=a.length;i<l;i++)r[r.length]=closure(this[i]);
return r;
}
//同样的参数为什么不用for循环?
btbtd 2007-05-21
  • 打赏
  • 举报
回复
呵呵, 这个问题我也正碰到, 比较类似于 C# 的装箱与取消装箱...
等会整整看...
muxrwc 2007-05-21
  • 打赏
  • 举报
回复
<script type="text/javascript">
Array.prototype.each = function(closure) {
return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];
};

Array.each = function (r, a) {
for (var i = 0 ; i < a.length ; i ++)
r[r.length] = a;
}

var a = [];
for (var i = 0 ; i < 50500 ; i ++)
a[i] = i;

var t = new Date;
Array.each([], a);
alert(new Date - t + "ms");


var t = new Date;
c = a.slice(0);
alert(new Date - t + "ms");

a.splice(0, 50000);
var t = new Date;
var c = a.each(function(x){return x})
alert(new Date - t + "ms");
</script>

你测试下就知道哪个最快了。。
gzdiablo 2007-05-21
  • 打赏
  • 举报
回复
Array.prototype.each = function(closure)
{
return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];
}
这样写的each效率高还是for循环的each效率高?
ronanljy2 2007-05-21
  • 打赏
  • 举报
回复
up
muxrwc 2007-04-29
  • 打赏
  • 举报
回复
adverse(King)
的那个。。修改的时候不影响copy的数组啊。。
@.@
迷糊ing...
muxrwc 2007-04-29
  • 打赏
  • 举报
回复
@.@
这个函数有什么特殊的用意?
to mingxuan3000(铭轩)
mingxuan3000 2007-04-29
  • 打赏
  • 举报
回复
Array.prototype.each = function(closure)
{
return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];
}
var a=new Array();
a[0]="a"
a[1]="b"
var c=a.each(function(x){return x})
alert(c)
a[0]="b"
alert(a)
alert(c)
mingxuan3000 2007-04-29
  • 打赏
  • 举报
回复
http://bbs.51js.com/viewthread.php?tid=67806&extra=&highlight=%2B%D4%C2%D3%B0&page=1
ronanljy2 2007-04-28
  • 打赏
  • 举报
回复
楼上的方法似乎不行,我的要求是returna初始化时候要和指定的数组arr_obj一模一样,但是returna修改的时候又不影响arr_obj
adverse 2007-04-27
  • 打赏
  • 举报
回复
var returna = new Array("1","2","3");
var arr_obj = returna.slice(0);
arr_obj[0] = 0;
alert(returna+"\n"+arr_obj);
这样就可以

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧