pop
- 定义:删除数组中的最后一个元素并返回该元素,此方法修改数组长度;
const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop()); // "tomato"
console.log(plants); // ["broccoli", "cauliflower", "cabbage", "kale"]
- 如果数组长度为0,则返回
undefined
;
console.log([].pop());
- 可以用
call
、apply
等被类数组对象调用,会根据类数组对象的length
属性来决定最后一个元素的位置。如果没有length
属性,则默认为0,返回undefined
。
function f() {
console.log([].pop.call(arguments)); // d
}
f('a', 's', 'd')
push
- 定义:将一个或多个元素添加到数组末尾,并返回数组长度。此方法改变数组长度;
const animals = ['pigs', 'goats', 'sheep'];
const count = animals.push('cows');
console.log(count); // 4
console.log(animals);// ["pigs", "goats", "sheep", "cows"]
- 可以结合
call()
或apply()
使用,根据length
属性决定插入位置。没有length
属性则视为0。
var obj = {
length: 0,
addElem: function addElem (elem) {
// obj.length is automatically incremented
// every time an element is added.
[].push.call(this, elem);
}
};
// Let's add some empty objects just to illustrate.
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2
shift
- 定义: 删除数组中的第一个元素并返回,此方法会改变原数组长度。
let arr = [,1,2];
arr.shift() // undefined;
arr.shift() // 1;
arr.shift() // 2;
arr.shift() // undefined;
- 在
while
循环中使用shift
var names = ["Andrew", "Edward", "Paul", "Chris" ,"John"];
while( (i = names.shift()) !== undefined ) {
console.log(i); // Andrew, Edward, Paul, Chris, John
}
unshift
- 定义:将一个或多个元素添加到数组开头,并返回该数组的新长度;
- 传入的多个参数会以块的形式插入,顺序不变;
let arr = [1,2,3];
arr.unshift(4, 5) // 5
arr // [4,5,1,2,3]
splice
- 定义:从指定位置开始删除指定个数的元素,可以在该位置增加新的元素。此方法会改变原数组,实现增删改,参数:
@params{start}: 起始位置索引,如果超出数组长度,则从数组末尾开始;如果是负数,则逆序,如果负数的绝对值大于数组长度,则从0位开始;
@params{deleteCount}:要删除的元素个数,包含start
位置元素,省略掉或者大于start起的元素个数,则把start之后的全删除。为0或者负数,则不删除元素;
@item1,item2,...: 要插入的元素,
@return 返回被修改的元素组成的数组,没有删除则返回空数组。
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum', 'guitar');
// 运算后的 myFish: ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// 被删除的元素: [], 没有元素被删除
slice
- 定义: 浅拷贝数组的一部分作为一个新的数组返回。原数组不变。参数:
@params {startIndex} 索引前闭,负数逆序,默认为0,超出数组范围,返回空数组;
@params {endIndex} 索引后开,负数逆序,默认到数组末尾。
var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
var citrus = fruits.slice(1, 3); // ['Orange','Lemon']