手写数组方法(七):concat

301 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

语法

array1.concat(array2, array3, ..., arrayN)

参数

该参数可以是具体的值,也可以是数组对象。可以是任意多个(包括0个,即不传参数也行)。

返回值

0个参数

let list = [1, 2, 3];
let res = list.concat();
console.log(res);
console.log(res === list);

不传参数时,concat方法返回自身的一个副本,常用于数组的浅拷贝

image.png

多个参数

let list = [1, 2, 3];
let arr1 = 2;
let arr2 = [2, 3, 4];
let res = list.concat(arr1, arr2);
console.log(res);

image.png

可以看到参数也可以不是数组,可否是其他类型呢?比如对象?亦或是null

let list = [1, 2, 3];
let arr1 = 2;
let arr2 = null;
let arr3 = undefined;
let arr4 = { age: 18 };
let res = list.concat(arr1, arr2, arr3, arr4);
console.log(res);

image.png

是的,来者不拒,管你是什么类型,我拼接起来就是了!

手写

理清需求

  • 函数接收任意个参数包括0
  • 函数会返回一个全新的数组对象
  • 参数可以是任意类型的数据,如果是数组,则将数组中的元素拼接到新数组中 根据需求,不难写出以下代码:
Array.prototype._concat = function(...args) {
    let res = [...this];
    args.forEach(arg => {
        if (!Array.isArray(arg)) {
            res.push(arg);
        } else {
            arg.forEach(item => {
                res.push(item);
            })
        }
    })
    return res;
}

测试

let list = [1, 2, 3];
let arr1 = 2;
let arr2 = null;
let arr3 = undefined;
let arr4 = { age: 18 };
let res = list._concat(arr1, arr2, arr3, arr4);
console.log(res);

image.png

返回的结果跟之前用原生concat测的结果一样,我们成功了!手写代码是不是很简单,其实只要理清思路了,写代码就如泉涌一般,简单明了。

结语

今天关于数组concat的介绍就讲到这里,关注我获取更多有关数组方法的讲解,后续会持续更新。我是末世未然,一个爱折腾的新晋奶爸,祝好