js数组复制(如何在JavaScript中更好地使用数组)
本文目录
- 如何在JavaScript中更好地使用数组
- 关于 js 数组拷贝的问题
- JavaScript中concat复制数组方法浅析
- js 怎样传递一个数组到另一个js
- JS如何将一个已知数组赋给一个新定义的数组
- JS数组克隆的几种方式
- 如何复制数组的一部分到另外一个数组
- js 数组克隆方法 小结
- 如何把js数组里面的引用转为另外一个数组 如arr[0]=arr1;
如何在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;
}
更多文章:
eraser下载(求数据彻底删除软件DoYourData Super Eraser Mac版)
2023年12月31日 20:20
奥特曼激斗传1 5无敌版(奥特曼激斗传无敌版怎么打出迪迦、戴拿和赛罗)
2024年6月24日 03:48
世界杯直播app(请问大神谁知道世界杯直播app有哪些,大神解答,急急)
2024年5月8日 08:55
大型赛车游戏手机版(推荐一个手机游戏!赛车的!不用账号的!内存不要太大!)
2024年7月24日 14:13
下载滴滴出行最新版(滴滴出行app下载安装安卓版怎么下载什么地方可以下载)
2024年7月15日 19:36
冒险岛里面黑暗契约书的任务是交给谁的在哪里的?黑暗之魂2黑暗契约路线
2024年5月2日 04:16