返回
手写常用的JS方法,全面提升你的JS技能
前端
2023-12-06 12:24:34
## 前言
作为前端开发,JavaScript是重中之重,代码能力毋庸置疑是非常重要的。本文提供了高频前端面试题之手写常用JS方法,帮助您扩展并巩固自己的JS基础,提升您的编程技巧和编码能力,在工作中可以对常用的需求进行手写实现,比直接调用库更加灵活,对JS有更深入的了解。
本文涵盖了数组操作、字符串操作、函数操作、对象操作、时间操作、正则表达式操作等方面的方法,涵盖了前端开发的常见场景,非常适合前端开发人员学习和参考。
## 常用JS方法手写实现
### 数组操作
* **数组去重**
```javascript
function unique(array) {
return [...new Set(array)];
}
- 数组扁平化
function flatten(array) {
return array.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
}
- 数组最大值
function max(array) {
return Math.max(...array);
}
字符串操作
- 字符串反转
function reverseString(str) {
return str.split('').reverse().join('');
}
- 字符串首字母大写
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
- 字符串查找替换
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
}
函数操作
- 函数柯里化
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
} else {
return function(...args2) {
return curried(...args, ...args2);
}
}
}
}
- 函数防抖
function debounce(fn, delay) {
let timer = null;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn(...args);
}, delay);
}
}
对象操作
- 对象深拷贝
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(val => deepCopy(val));
}
const newObj = {};
for (const key in obj) {
newObj[key] = deepCopy(obj[key]);
}
return newObj;
}
- 对象合并
function mergeObjects(...objs) {
return objs.reduce((acc, obj) => {
for (const key in obj) {
acc[key] = obj[key];
}
return acc;
}, {});
}
时间操作
- 时间格式化
function formatDate(date, format) {
const o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (const k in o) {
if (new RegExp('(' + k + ')').test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('