前言
接上一篇文章,我们来详细解读js数组的内容,本篇幅讲述“涉及数据元素的操作,以及数组的拆分和拼接”,上一篇传送门
push()
push():向数组的最后面插入一个或多个元素,返回结果为新数组的长度。会改变原数组,因为原数组变成了新数组。
语法:新数组的长度 = 数组.push(元素);
示例:
var arr = ['王一', '王二', '王三'];
var result1 = arr.push('王四'); // 末尾插入一个元素
var result2 = arr.push('王五', '王六'); // 末尾插入多个元素
console.log(result1); // 打印结果:4
console.log(result2); // 打印结果:6
console.log(JSON.stringify(arr)); // 打印结果:["王一","王二","王三","王四","王五","王六"]
pop()
pop():删除数组中的最后一个元素,返回结果为被删除的元素。
语法:被删除的元素 = 数组.pop();
示例:
var arr = ['王一', '王二', '王三'];
var result1 = arr.pop();
console.log(result1); // 打印结果:王三
console.log(JSON.stringify(arr)); // 打印结果:["王一","王二"]
unshift()
unshift():在数组最前面插入一个或多个元素,返回结果为新数组的长度。会改变原数组,因为原数组变成了新数组。插入元素后,其他元素的索引会依次调整。
语法:新数组的长度 = 数组.unshift(元素);
示例:
var arr = ['王一', '王二', '王三'];
var result1 = arr.unshift('王四'); // 最前面插入一个元素
var result2 = arr.unshift('王五', '王六'); // 最前面插入多个元素
console.log(result1); // 打印结果:4
console.log(result2); // 打印结果:6
console.log(JSON.stringify(arr)); // 打印结果:["王五","王六","王四","王一","王二","王三"]
shift()
shift():删除数组中的第一个元素,返回结果为被删除的元素。
语法:被删除的元素 = 数组.shift();
示例:
var arr = ['王一', '王二', '王三'];
var result1 = arr.shift();
console.log(result1); // 打印结果:王一
console.log(JSON.stringify(arr)); // 打印结果:["王二","王三"]
小结:
- push和unshift是一样的效果,区别是push是后插,unshift是前插
- pop和shift是一样的效果,区别是pop是后删,shift是前删
slice()
slice():从数组中提取指定的一个或者多个元素,返回结果为新的数组(不会改变原来的数组)。
注意:~该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回。
语法:新数组 = 原数组.slice(开始位置的索引, 结束位置的索引);
注意:包含开始索引,不包含结束索引,即范围为 [startIndex,endIndex)
举例:
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
const result1 = arr.slice(); // 不加参数时,则获取所有的元素。相当于数组的整体赋值
const result2 = arr.slice(2); // 从第二个值开始提取,直到末尾
const result3 = arr.slice(-2); // 提取最后两个元素
const result4 = arr.slice(2, 4); // 提取从第二个到第四个之间的元素(不包括第四个元素)
const result5 = arr.slice(4, 2); // 空
console.log('arr:' + JSON.stringify(arr));
console.log('result1:' + JSON.stringify(result1));
console.log('result2:' + JSON.stringify(result2));
console.log('result3:' + JSON.stringify(result3));
console.log('result4:' + JSON.stringify(result4));
console.log('result5:' + JSON.stringify(result5));
打印结果:
arr: ['a', 'b', 'c', 'd', 'e', 'f'];
result1: ['a', 'b', 'c', 'd', 'e', 'f'];
result2: ['c', 'd', 'e', 'f'];
result3: ['e', 'f'];
result4: ['c', 'd'];
result5: [];
补充:
很多前端开发人员会用 slice()将伪数组,转化为真数组。写法如下:
// 方式1
array = Array.prototype.slice.call(arrayLike);
// 方式2
array = [].slice.call(arrayLike);
ES6 看不下去这种蹩脚的转化方法,于是诞生了一个新的 API: Array.from(),
array = Array.from(arrayLike);
关于这个 API 的详细介绍,上面的内容已经讲了,请往前翻。
splice()
splice():从数组中删除指定的一个或多个元素,返回结果为被删除元素组成的新数组(会改变原来的数组)。
注意:该方法会改变原数组,会将指定元素从原数组中删除,被删除的元素会封装到一个新的数组中返回。
语法:
arrayObject.splice(index,howmany,item1,.....,itemX)
预期效果:
-
删除(最基本的)
新数组 = 原数组.splice(起始索引index, 需要删除的个数);
-
添加元素
新数组 = 原数组.splice(起始索引index, 需要删除的个数(设为0), 新的元素1, 新的元素2...);
-
替换(由添加扩展)
新数组 = 原数组.splice(起始索引index, 需要删除的个数(要被替换的元素个数), 新的元素1, 新的元素2...);
-
删除替换同时存在
控制删除个数即可实现
上方语法中,第三个及之后的参数,表示:删除元素之后,向原数组中添加新的元素,这些元素将会自动插入到起始位置索引的前面。也可以理解成:删除了哪些元素,就在那些元素的所在位置补充新的内容。
slice()方法和splice()方法很容易搞混,请一定要注意区分。
举例 1:
var arr1 = ['a', 'b', 'c', 'd', 'e', 'f'];
var result1 = arr1.splice(1); //从第index为1的位置开始,删除元素
console.log('arr1:' + JSON.stringify(arr1));
console.log('result1:' + JSON.stringify(result1));
结果
arr1:["a"]
result1:["b","c","d","e","f"]
举例 2:(我们来看看第三个参数的用法)
var arr4 = ['a', 'b', 'c', 'd', 'e', 'f'];
//从第index为1的位置开始删除元素,一共删除三个元素。并且在 index=1 的前面追加两个元素
var result4 = arr4.splice(1, 3, '小只前端攻城狮', 'vae');
console.log('arr4:' + JSON.stringify(arr4));
console.log('result4:' + JSON.stringify(result4));
结果
arr4:["a","小只前端攻城狮","vae","e","f"]
result4:["b","c","d"]
fill()
fill():用一个固定值填充数组,返回结果为新的数组。不会改变原数组。
语法:
// 用一个固定值填充数组。数组里的每个元素都会被这个固定值填充
新数组 = 数组.fill(固定值);
// 从 startIndex 开始的数组元素,用固定值填充
新数组 = 数组.fill(固定值, startIndex);
// 从 startIndex 到 endIndex 之间的元素(包左不包右),用固定值填充
新数组 = 数组.fill(固定值, startIndex, endIndex);
举例:
// 创建一个长度为4的空数组,然后用 'f' 来填充这个空数组
console.log(Array(4).fill('f')); // ['f', 'f', 'f,' 'f']
// 将现有数组的每一个元素都进行填充
console.log(['a', 'b', 'c', 'd'].fill('f')); // ['f', 'f', 'f,' 'f']
// 指定位置进行填充
console.log(['a', 'b', 'c', 'd'].fill('f', 1, 3)); // ["a", "f", "f", "d"]