javascript里面的splice函数的用法求解

晴空万里
  • 157
a=[1,2,3,4];
b=a;
c=b;
c.splice(3,1," ");
console.log(a);  //输出是[ 1, 2, 3, ' ' ]


e=2;
d=e;
f=d;
f=3;
console.log(e);//输出是2

为什么会这样?还有我怎么才能让c数组经过splice 后不影响数组a的值呢?

回复
阅读 1.7k
6 个回答

首先你要先了解一下splice方法,可以看看w3school的解释:JavaScript splice() 方法
需要特别注意一下:
clipboard.png

而你的b和c都是对a数组的内存引用,所以你想要的是一个深拷贝。
可以看看下面这两种方式:

1、js的slice函数
代码如下:

var arr = ["One","Two","Three"];

var arrtoo = arr.slice(0);
arrtoo[1] = "set Map";
document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
document.writeln("数组的新值:" + arrtoo + "<br />");//Export:数组的新值:One,set Map,Three

2、js的concat方法
代码如下:

var arr = ["One","Two","Three"];
var arrtooo = arr.concat();
arrtooo[1] = "set Map To";
document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
document.writeln("数组的新值:" + arrtooo + "<br />");//Export:数组的新值:One,set Map To,Three

数组为引用类型,赋值引用同一个地址
b=JSON.parse(JSON.stringify(a));c=JSON.parse(JSON.stringify(b))

一个是地址引用一个是值引用的关系,建议楼主多看一些JS基础书。

要想改变C数组不影响A数组,需要将A数组的值copy一份到C数组中。然后在修改C数组

首先要理解JavaScript中的赋值

对于数组对象,是引用赋值,不会拷贝一份,而只是一个指针,指向的是同一份数据。

所以要么拷贝一份你的数组

简单的数组拷贝,假设数组元素中没有数组或者对象

var a = [1, 2, 3, 4];
var b = a.slice();

此时b和a是两份独立的数据

或者使用无副作用的数组方法(splice方法会改变原数组)

例如用slice等不会改变原数组的方法替代

题主没分清楚赋值的主要两种情况:一个是赋值的是原始类型如数值、布尔值,另一个是对象。

如果你学过c/c++等语言,大概也能知道一点,那就是 对象赋值 相当于是 赋值的是对象的地址。

所以当b=a时,b只是跟a一样指向了同一个对象 ,所以改b指向的内容,a也会跟着变化 ,因为他们指的同一个地方。

这标题不妥,如果你想不影响到数组a的话,不妨用slice

b = a.slice(0);//返回的是a数组的一个拷贝

..........

javascript 三种数组复制方法,对于webkit, 使用concat; 其他浏览器, 使用slice.
一. 三种数组复制方法 
1. by slice 
var arr = [1, 2, 3], copyArr; 
copyArr = arr.slice(); 

2. by concat 
var arr = [1, 2, 3], copyArr; 
copyArr = arr.concat(); 
3. by loop 
var arr = [1, 2, 3], copyArr = []; 
for (var i=0, j=arr.length; i 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏