JavaScript 数组操作

71 阅读1分钟

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];