手写数组方法(十六):push

471 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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);

image.png

曾经我就写过这种代码,哈哈哈~

白银

for循环改成数组forEach方法,治标不治本,还是没有理解push参数可以多个的问题~

黄金

let list = [];
let target = [1, 2, 3];
list.push(...target);
console.log(list);

image.png

扫地僧

let list = [];
let target = [1, 2, 3];
Array.prototype.push.apply(list, target);
console.log(list);

image.png

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方法,自己懂了就行,不求甚解哈哈哈哈~

稍微小测一下

image.png

冇有问题~完结撒花。

如果小伙伴觉得本文不错的话,顺便支持下我的参赛文章我用一个div就画出了一个大西瓜~ ,万分感谢!