前端宝典二十三:Array最常用的34个方法

这里列举了Array最常用的34个方法
其中静态方法两个、实例方法32个,对他们进行了分类比较,有助于更好的掌握。

一、前言:手写一个深拷贝

以下是一个用 JavaScript 手写的深拷贝方法,考虑了正则表达式、日期对象、数组和普通对象:

function deepCopy(obj) {
   
   
    if (obj === null || typeof obj!== 'object') {
   
   
        return obj;
    }

    let copy;
    if (Array.isArray(obj)) {
   
   
        copy = [];
        for (let i = 0; i < obj.length; i++) {
   
   
            copy[i] = deepCopy(obj[i]);
        }
    } else if (obj instanceof Date) {
   
   
        copy = new Date(obj);
    } else if (obj instanceof RegExp) {
   
   
        copy = new RegExp(obj.source, obj.flags);
    } else {
   
   
        copy = {
   
   };
        for (let key in obj) {
   
   
            if (obj.hasOwnProperty(key)) {
   
   
                copy[key] = deepCopy(obj[key]);
            }
        }
    }

    return copy;
}

使用示例:

const original = {
   
   
    number: 42,
    string: 'hello',
    date: new Date(),
    regex: /abc/g,
    array: [1, 2, {
   
    nested: 'value' }],
    object: {
   
    key: 'value' }
};

const copied = deepCopy(original);

console.log(copied);

这里要注意的是

  1. 通过obj instanceof Date判断是不是日期格式,如果是的话使用new Date(obj)
  2. 通过obj instanceof RegExp判断是不是正则格式,如果是的话使用new RegExp(obj.source, obj.flags),这里涉及到了正则的知识点。

这个函数通过判断输入对象的类型,分别处理不同的情况,确保能够正确地深拷贝各种类型的数据。

二、Array静态方法

1、Array.from

静态方法从可迭代或类数组对象创建一个新的浅拷贝的数组实例。

let arr = Array.from('foo');
console.log(arr);
// ["f", "o", "o"]

let lst = [1,2,3,{
   
   a: 1}];
let newList = Array.from(lst);
newList[3].a = 2;
console.log(newList);
console.log(lst);
// [ 1, 2, 3, { a: 2 } ]
// [ 1, 2, 3, { a: 2 } ]

console.log(Array.from([1, 2, 3], (x) => x + x));
// [2, 4, 6]

2、Array.of

通过可变数量的参数创建一个新的 Array 实例,而不考虑参数的数量或类型。

console.log(Array.of('foo', 2, 'bar', true));
// [ 'foo', 2, 'bar', true ]

三、Array实例方法

Array.prototype._
可以在实例对象中使用的方法

1、at( )方法

接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数。

let arr1 = [1,2,3,4,5];
let num = arr1.at(-1);
console.log(num);
// 5

2、concat( ) 方法

用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

let arr1 = [1,2,3,4,5];
let arr2 = [6,7,8];
let newArr = arr1.concat(arr2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值