有关数组的增、删、改、克隆的一些操作。
一、数组添加元素(push)
看如下的例子:
let arr1 = ['1','2','3'];
arr1[3] = 'b';
console.log("数组长度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 数组长度:4
[Log] arr1[0]:1
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] arr1[3]:b
如上,手动指定索引及对应值可以达到增加数组元素的效果,但通常动态处理过程中,我们需要用到push()。
说明:push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
示例如下:
let arr1 = ['1','2','3'];
console.log('数组新长度' + arr1.push('b'));
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 数组新长度4
[Log] arr1[0]:1
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] arr1[3]:b
二、数组元素的删除
1. pop()
说明:pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
示例:
let arr1 = ['1','2','3'];
console.log('删除的元素为:' + arr1.pop());
console.log('数组新长度:' + arr1.length);
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 删除的元素为:3
[Log] 数组新长度:2
[Log] arr1[0]:1
[Log] arr1[1]:2
2. splice
说明:splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。
语法:
arrayObject.splice(index,howmany,item1,.....,itemX)
参数 | 描述 |
---|---|
index | 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 |
howmany | 必需。要删除的项目数量。如果设置为 0,则不会删除项目。 |
item1, ..., itemX | 可选。向数组添加的新项目。 |
示例:
let arr1 = ['1','2','3'];
arr1.splice(0,1);
console.log("数组长度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 数组长度:2
[Log] arr1[0]:2
[Log] arr1[1]:3
清空数组:ary.splice(0,ary.length);
3. delete
说明:这种删除方式,被删除项变为undefined,但数组长度不变,也就是原来数组的索引保持不变,与splice的这点不同特点,可以在特定的应用场景选择使用。
示例:
let arr1 = ['1','2','3'];
delete arr1[0];
console.log("数组长度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 数组长度:3
[Log] arr1[0]:undefined
[Log] arr1[1]:2
[Log] arr1[2]:3
可以发现,第一项元素变为了“undefined”,但数组长度没有改变,如果需要获取非“undefined”的其他有效元素可以使用如下示例获得:
for(let index in arr1){
console.log('arr1[' + index + ']:' + arr1[index]);
}
输出结果为:
[Log] arr1[1]:2
[Log] arr1[2]:3
三、数组元素修改(删除后添加)
数组元素修改可以利用上述的splice方法实现,第三项参数可以输入想要替换的值,效果是,在删除元素所在的索引处添加新元素,当然,也可以添加多个元素。
示例:
let arr1 = ['1','2','3'];
arr1.splice(0,1,'a');
console.log("数组长度:" + arr1.length);
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
输出结果为:
[Log] 数组长度:3
[Log] arr1[0]:a
[Log] arr1[1]:2
[Log] arr1[2]:3
四、数组的克隆
我们先来看一个例子:
let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1;
arr1[0] = 'a';
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
console.log('arr2[' + i + ']:' + arr2[i]);
}
输出结果为:
[Log] arr1[0]:a
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] ------------
[Log] arr2[0]:a
[Log] arr2[1]:2
[Log] arr2[2]:3
可以发现,通过赋值的方式将arr1数组赋值给arr2数组,在arr1数组中的元素改变时,arr2相应索引处的元素也做了改变,这是因为arr2依然对arr1存在引用,而不是一个全新的数组对象。
1. 循环遍历、赋值。
若要克隆出一个全新的数组对象,首先,循环遍历、赋值,肯定可以实现:
let arr1 = ['1','2','3'];
let arr2 = new Array();
for(let i = 0; i < arr1.length; i++){
arr2[i] = arr1[i];
}
arr1[0] = 'a';
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
console.log('arr2[' + i + ']:' + arr2[i]);
}
输出结果:
[Log] arr1[0]:a
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] ------------
[Log] arr2[0]:1
[Log] arr2[1]:2
[Log] arr2[2]:3
2. concat()
说明:concat() 方法用于连接两个或多个数组。当连接空数组时,便形成了一个新数组对象。
示例:
let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1.concat();
arr1[0] = 'a';
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
console.log('arr2[' + i + ']:' + arr2[i]);
}
输出结果为:
[Log] arr1[0]:a
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] ------------
[Log] arr2[0]:1
[Log] arr2[1]:2
[Log] arr2[2]:3
3. slice
说明:slice() 方法可从已有的数组中返回选定的元素。
用法:
arrayObject.slice(start,end)
slice(0)表示返回已有数组的所有元素,示例:
let arr1 = ['1','2','3'];
let arr2 = new Array();
arr2 = arr1.slice(0);
arr1[0] = 'a';
for(let i = 0; i < arr1.length; i++){
console.log('arr1[' + i + ']:' + arr1[i]);
}
console.log('------------');
for(let i = 0; i < arr2.length; i++){
console.log('arr2[' + i + ']:' + arr2[i]);
}
输出结果为:
[Log] arr1[0]:a
[Log] arr1[1]:2
[Log] arr1[2]:3
[Log] ------------
[Log] arr2[0]:1
[Log] arr2[1]:2
[Log] arr2[2]:3