最近有人说总是记不清数组的这四个(unshift
、shift
、 push
、pop
)方法,哪个是添加?哪个是删除?其实可以先从操作的位置上来划分开,如果实在记不住可以按照下面的方式来记忆,其实这四个方法是特别常用的,如果记不住只能说写的代码、做项目太少了。
方法 | 说明 |
---|---|
unshift |
开头位置添加(s字母理解为start,也就是开始 ) |
shift |
开头位置删除(s字母理解为start,也就是开始 ) |
push |
末尾位置添加(p字母理解为屁股,也就是末尾 ) |
pop |
末尾位置删除(p字母理解为屁股,也就是末尾 ) |
splice |
在指定的位置添加、删除、替换 |
slice |
提取元素片段 |
push
arr.push(element1, ..., elementN)
在数组的末尾添加一个或多个元素
,并且返回数组的新长度
let array = ["赵", "钱", "孙"];
let len = array.push("李");
console.log(len); // > 4
console.log(array); // > ["赵", "钱", "孙", "李"]
array.push("周", "吴", "郑", "王");
console.log(array); // > ["赵", "钱", "孙", "李", "周", "吴", "郑", "王"]
unshift
arr.unshift(element1, ..., elementN)
在数组的开头添加一个或多个元素
,并返回该数组的新长度
let array = ["赵", "钱", "孙"];
let len = array.unshift("张三", "李四");
console.log(len); // 5
console.log(array); // ["张三", "李四", "赵", "钱", "孙"]
pop
arr.pop()
从数组中删除最后一个元素
,并返回该元素的值,数组为空时返回 undefined
let array = ["赵", "钱"];
let item = array.pop();
console.log(item); // 钱
console.log(array); // ["赵"]
array.pop();
console.log(array); // []
array.pop(); //undefined
console.log(array); // []
shift
arr.shift()
从数组中删除第一个元素
,并返回该元素的值,数组为空时返回 undefined
let array = ["赵", "钱", "孙"];
let item = array.shift();
console.log(item); // 赵
console.log(array); // ["钱", "孙"]
splice
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
从数组中指定位置删除、添加、替换元素
,以数组的形式返回被删除的元素(如果没删除元素则返回空数组)
参数 | 说明 |
---|---|
start |
指定修改的开始位置 1.如果值大于数组本身长度,则从数组末尾添加 2.如果值是负数,则表示数组倒数第几位 3.如果负数的绝对值大于数组的长度,则表示开始位置为第 0 位 |
deleteCount |
整数,需要移除的元素个数 1.如果值大于 start 之后的元素的总数,则删除start 位置和后面的所有元素2.如果此参数不传,则删除 start 位置和后面的所有元素3.如果此参数是 0 或者负数,则不移除元素 |
item1, item2, ... |
从start 位置开始要添加进数组的元素 |
//从第 1 位开始删除 1 个元素,插入"张三"和"李四"
let array = ["赵", "钱", "孙"];
let deleteItems = array.splice(1, 1, "张三", "李四");
console.log(deleteItems); // ["钱"]
console.log(array); // ["赵", "张三", "李四", "孙"]
slice
arr.slice([begin[, end]])
从当前的数组中返回选定元素的新数组对象(浅拷贝
),原始数组不会被改变。
特别注意:提取的元素包含
begin
位置的值,但是不包含end
位置的值
参数 | 说明 |
---|---|
begin |
提取元素的开始位置 1.如果值大于数组本身长度,则返回空数组 2.如果值是负数,则表示从数组倒数第几位提取 3.如果此参数不传,则默认从 0 的位置开始提取 |
end |
提取元素的结束位置 1.如此参数为负数,则表示在原数组中的倒数第几个元素结束抽取 2.如果此参数不传,则表示一直提取到原数组末尾 3.如果此参数大于原数组的长度,则一直提取到原数组末尾。 |
// 提取从位置1到3的元素
let array = ["赵", { name: "钱" }, "孙", "李"];
let newItems = array.slice(1, 3);
console.log(newItems); // [{name: "钱"},"孙"]
console.log(array); // ["赵", { name: "钱" }, "孙", "李"]
// 浅拷贝:修改原数组中位置1的name值,新数组中的name值也发生变化
array[1].name = "钱钱";
console.log(newItems); // [{name: "钱钱"},"孙"]
console.log(array); // ["赵", { name: "钱钱" }, "孙", "李"]