
之所以会单独针对这个api写这么一篇博文,一方面是因为最近在一次面试中聊到了这个API,我没能完全说出它的用法;另一方面则是因为通过熟悉后觉得这个api确实很灵活很强大,充分体现了javascript的灵活性。所以写这么一篇博文,可以让自己更深刻地记住这个方法,也希望能让更多地同仁用这个方法让自己的javascript代码更加简洁,更加有效率。
MDN Web Docs中对Array.prototype.splice()的描述信息如下
splice(start, deleteCount, item1, item2, ...) 方法通过删除或替换现有元素和/或添加新元素来更改数组的内容。
传参信息如下
针对上面的描述,我们一一验证它的所有用法。
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 1); // 从第二个位置开始删掉一个元素
console.log(ary); // ['a', 'c', 'd', 'e', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2); // 从第二个位置开始删掉两个元素
console.log(ary); // ['a', 'd', 'e', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(-2, 1); // 删掉倒数第二个元素‘e’
console.log(ary); // ['a', 'b', 'c', 'd', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(0, ary.length); // 删掉所有元素
console.log(ary); // []let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(ary.length, 0, 'x'); // 在数组末尾追加一个元素
console.log(ary); // ['a', 'b', 'c', 'd', 'e', 'f', 'x']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 0, 'x'); // 在数组第二个元素前插入一个元素
console.log(ary); // ['a','x', 'b', 'c', 'd', 'e', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(-2, 0, 'x'); // 在数组倒数第二个元素前插入一个元素
console.log(ary); // ['a', 'b', 'c', 'd', 'x', 'e', 'f']let ary = ['a', 'b', 'c'];
let ary2 = ['d', 'e', 'f']
ary.splice(ary.length, 0, ...ary2); // 数组拼接
console.log(ary); // ['a', 'b', 'c', 'd', 'e', 'f']替换元素其实执行的是先删除再插入,所以一定要清楚传入参数的意义
let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 1, 'x'); // 替换第二个元素‘b’为‘x’ (长度和传入的替换元素个数都为一)
console.log(ary); // ['a', 'x', 'c', 'd', 'e', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2, 'x'); // 删掉第二个和第三个元素‘b’ ‘c’,插入一个元素‘x’ (长度大于传入的替换元素个数)
console.log(ary); // ['a', 'x', 'd', 'e', 'f']let ary = ['a', 'b', 'c', 'd', 'e', 'f'];
ary.splice(1, 2, 'x', 'y', 'z'); // 删掉第二个和第三个元素‘b’ ‘c’,插入三个元素‘x’,‘y’, ‘z’ (长度小于传入的替换元素个数)
console.log(ary); // ['a', 'x','y', 'z', 'd', 'e', 'f']上面这些就是我目前总结的常用的splice的用法,如有更多使用方法,欢迎留言讨论