这里列举了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);
这里要注意的是
- 通过
obj instanceof Date
判断是不是日期格式
,如果是的话使用new Date(obj)
- 通过
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