关于数组复制的问题

引用自:http://blog.sina.com.cn/s/blog_51baa1570100io8r.html

 

一、 错误实现
var array1 = new Array("1","2","3"); 
var array2; 
array2 = array1; 
array1.length = 0; 
alert(array2); //返回为空

这种做法是错的,因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类

型。array2得到的是引用,所以对array1的修改会影响到array2。

二、 使用slice()

可使用slice()进行复制,因为slice()返回也是数组。

var array1 = new Array("1","2","3"); 
var array2; 
array2 = array1.slice(0); 
array1.length = 0; 
alert(array2); //返回1、2、3  

三、 使用concat()

注意concat()返回的并不是调用函数的Array,而是一个新的Array,所以可以利用这一点进行复制。

var array1 = new Array("1","2","3"); 
var array2; 
array2 = array1.concat(); 
array1.length = 0; 
alert(array2); //返回1、2、3 

四、 测试

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Array Test</title> 
<script type="text/javascript"> 
var array1; 
var array2; 

function clone1() {
array1 = new Array("1","2","3");
array2 = array1; 
array1.length = 0; 
alert(array2); 
} 

function clone2() { 
array1 = new Array("1","2","3");
array2 = array1.slice(0); 
array1.length = 0; 
alert(array2);
} 

function clone3() { 
array1 = new Array("1","2","3");
array2 = array1.concat(); 
array1.length = 0; 
alert(array2);
} 

</script> 

</head> 
<body> 
<input type="button" value="clone1" οnclick="clone1()" /><br /> 
<input type="button" value="clone2" οnclick="clone2()" /><br /> 
<input type="button" value="clone3" οnclick="clone3()" /><br /> 
</body> 
</html>

 

转载于:https://www.cnblogs.com/cnblogs-jcy/p/5262849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第十五章 数组进阶 15.1 数据模型 数据是描述事务的符号记录,模型是现实世界的抽象。现实世界的事务及关联关系可以抽象成一个具体的模型,模型通过某种数据结构映射到计算机世界中,进而计算机通过软件处理数据来达到模拟、管理现实世界事务的目的。 通过数组可以管理学生花名册、模拟一个棋盘等。 案例 贪吃蛇游戏 1.模型设计 2.视图表达 3.获取控制信息 clock函数是自进程启动后此进程运行到此处使用CPU的毫秒数,需要头文件time.h。 kbhit函数检查是否有键按下,返回值为整数,未按键时返回0,需要头文件conio.h。 4.利用控制信息修改数据模型变为新的数据模型 例:贪吃蛇游戏 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #include<time.h> int head,tail; int main() { int changeModel(char tcsQipan[22][22],int tcsZuobiao[2][20],char direction); long start; int gamespeed=500; int timeover; int direction=77; char tcsQipan[22][22]; int tcsZuobiao[2][20]; int i,j; /*初始化蛇位置坐标*/ for(i=0; i<=3; i++) { tcsZuobiao[1][i]=i+1; tcsZuobiao[0][i]=1; } head=3; /*蛇头在第3列*/ tail=0; /*蛇尾在第0列*/ /*初始化棋盘*/ /*初始化贪吃蛇棋盘中间空白部分*/ for(i=1; i<=20; i++) for(j=1; j<=20; j++) tcsQipan[i][j]=' '; /*初始化贪吃蛇棋盘上下墙壁*/ for(i=0; i<=21; i++) { tcsQipan[0][i]='-'; tcsQipan[21][i]='-'; } /*初始化贪吃蛇棋盘左右墙壁*/ for(i=0; i<=20; i++) { tcsQipan[i][0]='|'; tcsQipan[i][21]='|'; } /*初始化贪吃蛇在棋盘中的位置*/ for(i=1; i<=3; i++) tcsQipan[1][i]='*'; tcsQipan[1][4]='#';/*蛇头*/ /*重复:清屏、显示磁盘、获取控制方向、按键有效性检查、更新模型*/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值