JavaScript 数组操作
数组拷贝
浅拷贝
js中数组的直接赋值是数组的浅拷贝,共用同一块内存地址。操作其中一个数组发生变化,另一个数组也会相应的变化。
var arr = [1,2,3,4];
var arr_ = arr;
arr.push(5);
// arr = [1,2,3,4,5];
// arr_ = [1,2,3,4,5];
拷贝
数组中没有引用类型时(数组,对象等),可以直接使用slice(),concat()进行深拷贝。数组中的引用类型不会实现深拷贝
var arr = [1,2,3,4];
var copy = [].concat(arr);
arr.push(5);
// arr = [1,2,3,4,5];
// copy = [1,2,3,4];
var arr = [{a:1}];
var copy = [].concat(arr);
arr[0].a = 2;
// arr = [{a:2}];
// copy = [{a:2}];
深拷贝
完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。使用JSON.parse(JSON.stringify())获得深拷贝对象
使用该方法无法拷贝对象的方法,如果想要拷贝对象的方法,使用jQuery的$.extend
var arr = [{a:1}];
var copy = JSON.parse(JSON.stringify(arr));
arr[0].a = 2;
// arr = [{a:2}];
// copy = [{a:1}];
删除
删除最后一位
var arr = [1,2,3,4];
arr.pop()
// arr = [1,2,3];
var arr = [1,2,3,4];
var arr_ = arr.slice(0, arr.length - 1);
// arr = [1,2,3,4];
// arr_ = [1,2,3];
var arr = [1,2,3,4];
var arr_ = arr.splice(arr.length - 1, 1);
// arr = [1,2,3];
// arr_ = [4];
var arr = [1,2,3,4];
arr.length = arr.length - 1;
// arr = [1,2,3];
删除第一位
var arr = [1,2,3,4];
arr.shift();
// arr = [1,2,3];
var arr = [1,2,3,4];
var arr_ = arr.slice(1);
// arr = [1,2,3,4];
// arr_ = [2,3,4];
var arr = [1,2,3,4]
var arr_ = arr.splice(0, 1)
// arr = [2,3,4]
// arr_ = [1]
删除数组中某个下标
var arr = [1,2,3,4];
var key = 2;
var arr_ = arr.splice(key, 1);
// arr = [1,2,4];
// arr_ = [3];
删除数组中的某个值
var arr = [1,2,3,4];
var value = 2;
var arr_ = arr.splice(arr.indexOf(value), 1);
// arr = [1,3,4];
// arr_ = [2];