持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
昨天写了pop
方法,今天来讲讲shift
。
语法
arr.shift()
shift
方法从一个数组中删除并返回第一个元素。
返回值
从数组中删除的元素(当数组为空时返回undefined
)。
例子
let list = [1, 2, 3];
list.shift();
当数组为空时:
let list = [];
list.shift();
与call
,apply
一起使用:
let fruits = ['apple', 'orange', 'banana'];
Array.prototype.shift.apply(fruits);
let fruits = ['apple', 'orange', 'banana'];
Array.prototype.shift.call(fruits);
let fruit = {name: 'apple', weight: '300g', length: 3};
Array.prototype.shift.call(fruit);
shift
方法并不局限于数组:这个方法能够通过 call
或 apply
方法作用于类似数组的对象上。但是对于没有 length
属性(从 0
开始的一系列连续的数字属性的最后一个)的对象,调用该方法可能没有任何意义。
手写
Array.prototype._shift = function() {
if(!this.length) return undefined;
let res = this[0];
let temp = [...this];
for(let i = 0; i < this.length; i++) {
this[i] = temp[i+1];
}
this.length -= 1;
return res;
}
没问题,我们能否不借助临时变量来调整数组顺序呢?
Array.prototype._shift = function() {
if(!this.length) return undefined;
let res = this[0];
for(let i = 0; i < this.length; i++) {
this[i] = this[i + 1];
}
this.length -= 1;
return res;
}
测了一下结果是一样的,这边把数组的后一位的值赋值给前一位,并不会导致数据丢失,所以不需要引入变量保存原始数组。
应用
在日常开发中,有种场景需要你删除数组第一个元素,还得把它保存起来,那这时候用shift
是不二选择。不然你还得定义一个变量等于数组的第一个元素,多此一举。
结语
今天关于数组shift
的介绍就讲到这里,关注我获取更多有关数组方法的讲解,后续会持续更新。我是末世未然,一个爱折腾的新晋奶爸,祝好