持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
平时用的最多的数组方法push说第二没人敢认第一吧?就是这么常用的方法,我们有没有想过自己手写一个呢?那么今天我们就自己来写一个push方法。
语法
arr.push(element1, ..., elementN)
哦,原来push方法可以同时传多个元素呀!刚开始我是不知道的,后面才知道。我敢打赌有人不知道,不知道的评论区集合了~
参数
elementN:被添加到数组末尾的元素。
返回值
当调用该方法时,新的 length 属性值将被返回。
欧?返回的竟然是length,这是我以前没有想过的。
示例
往一个数组中添加另一个数组的所有值,你会怎么做?
青铜
let list = [];
let target = [1, 2, 3];
for(let i = 0; i < target.length; i++) {
list.push(target[i]);
}
console.log(list);
曾经我就写过这种代码,哈哈哈~
白银
将for循环改成数组forEach方法,治标不治本,还是没有理解push参数可以多个的问题~
黄金
let list = [];
let target = [1, 2, 3];
list.push(...target);
console.log(list);
扫地僧
let list = [];
let target = [1, 2, 3];
Array.prototype.push.apply(list, target);
console.log(list);
emmmmm...果然高深莫测,我还是当个黄金吧,apply什么的我不懂啊。其实呢,被添加的元素如果很多,用直接展开符展开传进去呢是有参数个数溢出风险的。采用扫地僧的写法则没有这方面的顾虑。这么一说,以后在开发中得注意了呀,尽可能用扫地僧写法~
其他
push的参数可以是任何数据类型,文章仅以数字为例。
手写
又到了最有意思的手写环节,往数组末尾添加元素嘛,简单:
Array.prototype._push = function(...args) {
if(!args) return 0;
let start = this.length;
let length = this.length + args.length;
for(let i = this.length; i < length; i++) {
this[i] = args[i - start];
}
return length;
}
以上写法与真实的push差别可能很大,我只是用自己的思路实现以下push方法,自己懂了就行,不求甚解哈哈哈哈~
稍微小测一下
冇有问题~完结撒花。
如果小伙伴觉得本文不错的话,顺便支持下我的参赛文章我用一个div就画出了一个大西瓜~ ,万分感谢!