0%

你不知道的快速复制数组小秘密

方法1、arrayObject.slice(start,end) 快速深度复制一个多维数组
关于 slice(start,end)方法说明

参数 描述
start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
返回值

返回一个新的数组,包含从 startend (不包括该元素)的 arrayObject 中的元素。
如果想删除数组中的一段元素,应该使用方法 Array.splice()
splice() 方法会直接对数组进行修改

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var classArr= [
[
{
name: 'stundentA',
age: 18,
subject:['科目一','科目二','科目三']
}
],
[
{
name: 'stundentB',
age: 22,
subject:['科目1','科目2','科目3']
}
],
[
{
name: 'stundentC',
age: 21,
subject:['科目A','科目B','科目C']
}
]
];
var copyArr = classArr.slice();

classArr.splice(2,1); // [{name: 'stundentC',age: 21,subject:['科目A','科目B','科目C']}]
console.log(classArr) // [[{name: 'stundentA',age: 18,subject:['科目一','科目二','科目三']}],[{name: 'stundentB',age: 22,subject:['科目1','科目2','科目3']}]]
console.log(copyArr) // [[{name: 'stundentA',age: 18,subject:['科目一','科目二','科目三']}],[{name: 'stundentB',age: 22,subject:['科目1','科目2','科目3']}],[{name: 'stundentC',age: 21,subject:['科目A','科目B','科目C']}]]

方法2、使用es6的解构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var classArr= [
[
{
name: 'stundentA',
age: 18,
subject:['科目一','科目二','科目三']
}
],
[
{
name: 'stundentB',
age: 22,
subject:['科目1','科目2','科目3']
}
],
[
{
name: 'stundentC',
age: 21,
subject:['科目A','科目B','科目C']
}
]
];
var copyArr = [...classArr];
classArr.splice(2,1); // [{name: 'stundentC',age: 21,subject:['科目A','科目B','科目C']}]

console.log(classArr) // [[{name: 'stundentA',age: 18,subject:['科目一','科目二','科目三']}],[{name: 'stundentB',age: 22,subject:['科目1','科目2','科目3']}]]
console.log(copyArr) // [[{name: 'stundentA',age: 18,subject:['科目一','科目二','科目三']}],[{name: 'stundentB',age: 22,subject:['科目1','科目2','科目3']}],[{name: 'stundentC',age: 21,subject:['科目A','科目B','科目C']}]]
------ 本文结束------