js数组复制(如何在JavaScript中更好地使用数组)

2024-07-12 20:52:17 79

js数组复制(如何在JavaScript中更好地使用数组)

本文目录

如何在JavaScript中更好地使用数组

javascript中会改变原数组的方法

1. push() 方法在数组的尾部添加一个或多个元素,并返回数组的长度

2. pop() 方法删除数组的最后一个元素,减小数组长度并返回它删除的值。

参数:无

//组合使用push()和pop()能够用JavaScript数组实现先进后出的栈

3. unshift() 方法在数组的头部添加一个或多个元素,并将已存在的元素移动到更高索引的位置来获得足够的空间,最后返回数组新的长度。

参数: item1, item2, ..., itemX ,要添加到数组开头的元素

4. shift() 方法删除数组的第一个元素并将其返回,然后把所有随后的元素下移一个位置来填补数组头部的空缺,返回值是删除的元素

参数: 无。

5. splice() 方法是在数组中插入或删除元素的通用方法

语法 array.splice(start)

参数:

start

指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位(从-1计数);若只使用start参数而不使用deleteCount、item,如:array.splice(start) ,表示删除的元素。

deleteCount (可选)

整数,表示要移除的数组元素的个数。如果 deleteCount 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果 deleteCount 大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。 如果deleteCount被省略,则其相当于(arr.length - start)。

item1, item2, ... (可选)

要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。

返回值: 由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。

// start不超过数组长度(以下操作是连续的)

6. sort() 方法将数组中的元素排序并返回排序后的数组

参数:

compareFunction (可选) 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。 如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

* 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;

* 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);

* 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。

* compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

返回值: 返回排序后的数组。原数组已经被排序后的数组代替。

7. reverse() 方法将数组中的元素颠倒顺序,返回逆序的数组。

参数: 无

let arr = ;

arr.reverse() // arr是

返回值: 返回顺序颠倒后的数组。原数组已经被排序后的数组代替。

8. copyWithin() 方法浅复制数组的一部分到同一数组中的另一个位置,并返回它,而不修改其大小。 (ES6新增)

语法: arr.copyWithin(target)

参数:

target

0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算。

如果 target 大于等于 arr.length,将会不发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length。

start

0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。

如果 start 被忽略,copyWithin 将会从0开始复制。

end

0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算。

如果 end 被忽略,copyWithin 将会复制到 arr.length。

返回值: 改变了的数组。

// copyWithin 函数是设计为通用的,其不要求其 this 值必须是一个数组对象。

.copyWithin.call({length: 5, 3: 1}, 0, 3);

// {0: 1, 3: 1, length: 5}

9. fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。 (ES6新增)

语法: arr.fill(value)

参数:

value 用来填充数组元素的值。

start (可选) 起始索引,默认值为0。

end (可选) 终止索引,默认值为 this.length。

如果 start 是个负数, 则开始索引会被自动计算成为 length+start, 其中 length 是 this 对象的 length 属性值. 如果 end 是个负数, 则结束索引会被自动计算成为 length+end。

返回值: 修改后的数组



关于 js 数组拷贝的问题


arry2[i] = tempArry;因为arry2[i]引用的是tempArry这个变量,当整个函数完全执行完的时候,tempArray变成了[5,6,7]了,所以输出的是[5,6,7],4,[5,6,7]。还有个问题:deepCopy1(arry1[i], tempArry)传入的tempArry参数,也就是再次调用deepCopy1时候把tempArry赋值给arry2,但你没有把arry2数组清空,这就会导致一个bug,如果你的d变成[[1,2,3],4,[5,6]]那么输出的结果会是[[5,6,3],4,[5,6,3]]

JavaScript中concat复制数组方法浅析


我们在需要进行数组复制的时候可能会想到以下的方法
代码
var
arr1
=
[1,2,3,4,5];
var
arr2
=
;
arr2
=
arr1;
console.log(arr1);
console.log(arr2);
执行结果如下:
[1,
2,
3,
4,
5]
[1,
2,
3,
4,
5]
在这个例子中,将数组arr1赋值给了另一个数组arr2。
查看执行结果,似乎复制了数组的内容并创建了相同的数组。
但是,由于数组是“引用类型”的数据,因此它不会复制该值,而只是共享存储该值的内存的位置。
因此,我们编写以下代码
arr2.push(6);
console.log(arr1);
console.log(arr2);
执行结果如下
[1,
2,
3,
4,
5,
6]
[1,
2,
3,
4,
5,
6]
根据以上结果可以发现即使我们只给arr2添加新值6,但是数组arr1中也会添加一个6,这就是因为两个
数组都只引用存储值的位置,如果更改任一数组中的数据,两者都会改变。
所以下面我们就来使用concat方法复制数组
我们来看具体示例
var
arr1
=
[1,2,3,4,5];
var
arr2
=
;
arr2
=
arr1.concat();
arr2.push(6);
console.log(arr1);
console.log(arr2);
执行结果如下
[1,
2,
3,
4,
5]
[1,
2,
3,
4,
5,
6]
要将另一个数组复制到数组arr2,只需要在复制源arr1中执行concat()即可。
您可能感兴趣的文章:js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解深入理解javascript中concat方法javascript使用
concat
方法对数组进行合并的方法JS
Array创建及concat()split()slice()的使用方法浅谈JavaScript的push(),pop(),concat()方法JavaScript模拟数组合并concatjs采用concat和sort将N个数组拼接起来的方法

js 怎样传递一个数组到另一个js


a.js

window.arr=[1,3,5];
function fa(){
    arr.push(7);
}

b.js

function fb(){
    for(var k in arr){
        console.log(arr[k]);
    }
}

在HTML中分别引入a.js,b.js,共享arr;另外,在同一个HTML/JSP文件中可通过隐藏域的方式共享参数;不同文件中可通过cookie保存;


JS如何将一个已知数组赋给一个新定义的数组


将小数组的值循环赋值给大数组,如果大数组未满,继续循环赋值。或者直接一个循环(大数组的长度作为循环限制)赋值到小数组完,重置小数组的index为0,直到大数组全部赋值完。
【相关拓展】
第一种用for循环:
int x={1,2};
int y=new int;
for(int i=0;i《x.length;i++){
y[i]=x[i];
第二种用java提供的arraycopy
int x={1,2};
int y=new int;
System.arraycopy(x, 0, y, 0, x.length);//变量依次是(原数组,从原数组第几位开始,目标数组,从第几位开始粘贴,复制长度)

JS数组克隆的几种方式


最简单的就是for循环了:参考网页-网页链接

for循环是非常好用的。如果不知道高级方法,通过for循环能够完成我们大多数的需求。

var arr = [1,2,3,4,5]var arr2 = copyArr(arr)function copyArr(arr) {
let res =    for (let i = 0; i 《 arr.length; i++) {
res.push(arr[i])
}    return res
}123456789

如上,通过对数组的for循环,即可实现对数组的深拷贝了。


如何复制数组的一部分到另外一个数组


用Array.Copy方法将数组或者数组的一部分复制到另个数组。Array.Copy是静态方法,有多个重载版本。其中常用的是:
public static void Copy(
Array sourceArray,
int sourceIndex,
Array destinationArray,
int destinationIndex,
int length);
各个参数含义如下
sourceArray —— 源数组
sourceIndex —— 表示 sourceArray 中复制开始处的索引
destinationArray —— 目标数组,它接收数据
destinationIndex —— 表示 destinationArray 中存储开始处的索引
length —— 要复制的元素数目。
用法举例如下:
(1)复制数组的一部分到另一个数组
int src = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int dest = new int;
// 将数组 src 中元素 2,3,4,5 复制到 dest
Array.Copy(src, 1, dest, 0, 4);
(2)复制整个数组
int src = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int dest = new int[src.Length];
// 将数组 src 所有元素复制到 dest
Array.Copy(src, 0, dest, 0, src.Length);

js 数组克隆方法 小结


因此如果要创建一个与已经存在的对象内容相同的对象,不能通过简单的赋值操作。这样说的可能还是不太明白。
看下面的例子:
复制代码
代码如下:
var
a=[1,2,3,4];
var
b=a;c=b;
a.pop();
//移除最后一个元素
alert(b);
//弹出1,2,3
alert(c);
//弹出1,2,3
var
a=[1,2,3,4];
var
b=a;c=b;
a.pop();
//移除最后一个元素
alert(b);
//弹出1,2,3
alert(c);
//弹出1,2,3
我们执行上面的代码发现,在a的内容做改变后,变量b和c的结果也改变了。
上面的情况也许不是我们所需要的,我们希望的是创建一个与原对象内容一样的“新”对象。这样我们就需要通过一些克隆的办法来实现。
JS里Array也是一种Object。这里我们主要总结一下Array的克隆方式,我们这里为Array原生对象扩展一个clone方法。
1、最简单的办法,就是创建一个新数组,并遍历数组逐项添加到新数组中。
复制代码
代码如下:
Array.prototype.clone=function(){
var
a=;
for(var
i=0,l=this.length;i《l;i++)
a.push(this[i]);
return
a;
}
Array.prototype.clone=function(){
var
a=;
for(var
i=0,l=this.length;i《l;i++)
a.push(this[i]);
return
a;
}
这种实现方式是最容易想到也是最容易理解的,但是代码有点复杂了,我们仔细研究Array的一些方法,其实还有一个很简单的办法。下面说一下其它的两种办法。
2、通过Array对象的slice方法。
slice方法是通过参数start和end的传入值来返回数组中的一段,该方法不对原数组进行操作。我们通过slice(0)可以使其返回所有项。
复制代码
代码如下:
Array.prototype.clone=function(){
return
this.slice(0);
}
Array.prototype.clone=function(){
return
this.slice(0);
}
3、通过Array对象的concat方法。
concat方法是用来实现数组的合并的。通过和一个空函数的合并,即可实现我们的克隆功能。
复制代码
代码如下:
Array.prototype.clone=function(){
return
.concat(this);
}
//或者
Array.prototype.clone=function(){
return
this.concat();
}
Array.prototype.clone=function(){
return
.concat(this);
}
//或者
Array.prototype.clone=function(){
return
this.concat();
}
如果发挥想象应该还有其它的办法,以上只是本人想到的两种方法。
JavaScript
克隆数组最简单的方法
JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)

如何把js数组里面的引用转为另外一个数组 如arr[0]=arr1;


数组的下标都是连续的,想要把一个数组的下标放到另一个数组中,只需要把这个数组的长度求出来就行了;
例如数组 int a={1,2,3}; 存储数组a下标的数组int b ={0,1,2};代码如下:
int a ={1,2,3};
int count = a.length;
int b = new int[count];
for(int i =0; i《count; i++)
{
b[i]=i;
}

js数组复制(如何在JavaScript中更好地使用数组)

本文编辑:admin
js数组复制 ,c ,rip

更多文章:


td炮台防守奇迹版(求可以单机玩的TD炮台防守地图!)

td炮台防守奇迹版(求可以单机玩的TD炮台防守地图!)

本文目录求可以单机玩的TD炮台防守地图!td地图名称td炮台防守奇迹版 到战车那关怎么过冰封王座防守图求可以单机玩的TD炮台防守地图!http://bbs.uuu9.com/viewthread.php?tid=180179目录:华理TD正

2024年6月3日 20:26

eraser下载(求数据彻底删除软件DoYourData Super Eraser Mac版)

eraser下载(求数据彻底删除软件DoYourData Super Eraser Mac版)

本文目录求数据彻底删除软件DoYourData Super Eraser Mac版cookies是个什么东东啊!求数据彻底删除软件DoYourData Super Eraser Mac版DoYourData Super Eraser for

2023年12月31日 20:20

搜客云优化效果怎么样?广州搜客服饰有限公司怎么样

搜客云优化效果怎么样?广州搜客服饰有限公司怎么样

本文目录搜客云优化效果怎么样广州搜客服饰有限公司怎么样搜客软件如何获得积分搜客QQ空间人气是真的吗为啥一用搜客qq空间人气我qq就进入保护状态搜客QQ空间克隆器怎么下载使用搜客云优化效果怎么样搜客云优化软件介绍 “搜客”云优化

2024年7月15日 12:38

百度空间登录入口(百度空间登陆个人中心)

百度空间登录入口(百度空间登陆个人中心)

“百度空间登录入口”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看百度空间登录入口(百度空间登陆个人中心)!本文目录百度空间登陆个人中心百度空间如何登入怎样进入自己的百度空间在哪里登陆百度空间百度空间在哪里登入百度空间登陆首

2024年7月26日 03:56

冰雪单职业传奇手游(龙城决-冰雪单职业传奇手游)

冰雪单职业传奇手游(龙城决-冰雪单职业传奇手游)

“冰雪单职业传奇手游”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看冰雪单职业传奇手游(龙城决-冰雪单职业传奇手游)!本文目录龙城决-冰雪单职业传奇手游龙城决-冰雪单职业手游代理找哪个平台可靠传奇游戏排 行榜网络游戏有冰雪传

2024年7月20日 01:10

奥特曼激斗传1 5无敌版(奥特曼激斗传无敌版怎么打出迪迦、戴拿和赛罗)

奥特曼激斗传1 5无敌版(奥特曼激斗传无敌版怎么打出迪迦、戴拿和赛罗)

本文目录奥特曼激斗传无敌版怎么打出迪迦、戴拿和赛罗奥特曼激斗传1.2无敌版的操作方法奥特曼激斗传无敌版迪加到底怎没开启啊急求!!!!!!!!!!!奥特曼激斗传1.5无敌版怎么开其他人奥特曼激斗传无敌版怎么打出迪迦、戴拿和赛罗迪加,戴拿,塞罗

2024年6月24日 03:48

qq人工服务热线(qq人工客服电话是多少)

qq人工服务热线(qq人工客服电话是多少)

大家好,qq人工服务热线相信很多的网友都不是很明白,包括qq人工客服电话是多少也是一样,不过没有关系,接下来就来为大家分享关于qq人工服务热线和qq人工客服电话是多少的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目

2024年7月21日 12:18

最好的证券交易软件(哪个炒股软件最好用)

最好的证券交易软件(哪个炒股软件最好用)

本篇文章给大家谈谈最好的证券交易软件,以及哪个炒股软件最好用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录哪个炒股软件最好用中国十大炒股软

2024年4月4日 17:33

世界杯直播app(请问大神谁知道世界杯直播app有哪些,大神解答,急急)

世界杯直播app(请问大神谁知道世界杯直播app有哪些,大神解答,急急)

本文目录请问大神谁知道世界杯直播app有哪些,大神解答,急急智能电视机用什么apk可以看直播世界杯在哪个手机软件上可以直接看世界杯请问大神谁知道世界杯直播app有哪些,大神解答,急急好哇点击:zhidao.baidu.com/tszw/小窍

2024年5月8日 08:55

大型赛车游戏手机版(推荐一个手机游戏!赛车的!不用账号的!内存不要太大!)

大型赛车游戏手机版(推荐一个手机游戏!赛车的!不用账号的!内存不要太大!)

大家好,今天小编来为大家解答以下的问题,关于大型赛车游戏手机版,推荐一个手机游戏!赛车的!不用账号的!内存不要太大!这个很多人还不知道,现在让我们一起来看看吧!本文目录推荐一个手机游戏!赛车的!不用账号的!内存不要太大!手机上有什么好玩的赛

2024年7月24日 14:13

脑筋急转弯50个(50道难题脑筋急转弯及答案)

脑筋急转弯50个(50道难题脑筋急转弯及答案)

本篇文章给大家谈谈脑筋急转弯50个,以及50道难题脑筋急转弯及答案对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录50道难题脑筋急转弯及答案

2024年6月6日 00:22

腾讯游戏安全中心客服(腾讯游戏安全中心处罚申诉点了没反应)

腾讯游戏安全中心客服(腾讯游戏安全中心处罚申诉点了没反应)

大家好,如果您还对腾讯游戏安全中心客服不太了解,没有关系,今天就由本站为大家分享腾讯游戏安全中心客服的知识,包括腾讯游戏安全中心处罚申诉点了没反应的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录腾讯游戏安全中心处罚

2024年4月5日 00:15

苹果手机怎么使用地图导航?手机地图哪个最好用最准确

苹果手机怎么使用地图导航?手机地图哪个最好用最准确

今天给各位分享苹果手机怎么使用地图导航的知识,其中也会对苹果手机怎么使用地图导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录苹果手机怎么使用地图导航手机地图哪个最好用最准确手机百度地图怎么使用手机下载什么地

2024年8月11日 05:01

去水印的软件(免费去水印的软件都有哪些)

去水印的软件(免费去水印的软件都有哪些)

这篇文章给大家聊聊关于去水印的软件,以及免费去水印的软件都有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录免费去水印的软件都有哪些图片去水印软件哪个好用去水印软件有哪些去除照片水印的app软件用什么软件可以去掉水印什么软

2024年8月22日 23:35

下载滴滴出行最新版(滴滴出行app下载安装安卓版怎么下载什么地方可以下载)

下载滴滴出行最新版(滴滴出行app下载安装安卓版怎么下载什么地方可以下载)

“下载滴滴出行最新版”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看下载滴滴出行最新版(滴滴出行app下载安装安卓版怎么下载什么地方可以下载)!本文目录滴滴出行app下载安装安卓版怎么下载什么地方可以下载苹果什么时候可以下载

2024年7月15日 19:36

凤舞天骄这个游戏怎么样?凤舞天骄如何提升技能

凤舞天骄这个游戏怎么样?凤舞天骄如何提升技能

本文目录凤舞天骄这个游戏怎么样凤舞天骄如何提升技能凤舞天骄如何打装备凤舞天骄多少级应在什么地方打怪凤舞天骄 关于打造凤舞天骄的装备怎么打造呢凤舞天骄多少级开启将魂凤舞天骄的职业介绍《凤舞天骄》哪个职业比较好凤舞天骄百度官方网站下载的客户端

2023年7月12日 05:40

冒险岛里面黑暗契约书的任务是交给谁的在哪里的?黑暗之魂2黑暗契约路线

冒险岛里面黑暗契约书的任务是交给谁的在哪里的?黑暗之魂2黑暗契约路线

本文目录冒险岛里面黑暗契约书的任务是交给谁的在哪里的黑暗之魂2黑暗契约路线术士开了黑暗契约怎么办黑暗之魂2黑暗契约升级攻略黑暗之魂2原罪学者支线任务黑暗契约怎么完成dota2斯拉克黑暗契约快捷键炉石传说的黑暗契约效果是不是太bug冒险岛里面

2024年5月2日 04:16

360万能wifi下载(如何安装360wifi)

360万能wifi下载(如何安装360wifi)

各位老铁们,大家好,今天由我来为大家分享360万能wifi下载,以及如何安装360wifi的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录如何安装3

2024年7月5日 00:05

ie浏览器打不开闪退(电脑浏览器打不开闪退怎么办)

ie浏览器打不开闪退(电脑浏览器打不开闪退怎么办)

大家好,ie浏览器打不开闪退相信很多的网友都不是很明白,包括电脑浏览器打不开闪退怎么办也是一样,不过没有关系,接下来就来为大家分享关于ie浏览器打不开闪退和电脑浏览器打不开闪退怎么办的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我

2024年7月3日 18:18

荒野行动什么时候出的?荒野行动为什么下架了

荒野行动什么时候出的?荒野行动为什么下架了

各位老铁们,大家好,今天由我来为大家分享荒野行动,以及荒野行动什么时候出的的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录荒野行动什么时候出的荒野行

2024年7月11日 21:05

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索