手写题[JavaScript][工具类]
1. 热门手写题
1.1 深拷贝
1.2 数组去重
1.3 数组排序
1.4 数组扁平化
数组扁平化是指将多层嵌套的数组转换为一维数组。可以使用递归或迭代的方式来实现数组扁平化。
javascript
// 递归方式实现数组扁平化
function flattenArray(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flattenArray(item));
} else {
result.push(item);
}
});
return result;
}
// 示例
const nestedArray = [1, [2, [3, 4], 5], 6];
const flattenedArray = flattenArray(nestedArray); // [1, 2, 3, 4, 5, 6]
1.5 节流和防抖
1.6 求平均时间
javascript
const arr = ["8:01", "9:30", "11:50"];
let res = 0;
arr.forEach(el => {
res += new Date('2000/01/01 ' + el).getTime();
})
const average = new Date(res / arr.length);
console.log(`${average.getHours()}:${average.getMinutes()}`);
1.7 发布订阅模式
- 创建一个名为 eventBus 的事件总线对象,它具有 subscribe 和 publish 两个方法,分别用于订阅事件和发布事件。
- 当某个地方调用 subscribe 方法订阅了特定事件后,当其他地方调用 publish 方法发布该事件时,订阅的回调函数将会被触发执行。
javascript
// 创建一个全局的事件总线对象
const eventBus = {
// 存储事件及对应的回调函数
events: {},
// 订阅事件
subscribe(event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
},
// 发布事件
publish(event, data) {
const callbacks = this.events[event];
if (callbacks) {
callbacks.forEach((callback) => {
callback(data);
});
}
},
};
// 在需要订阅事件的地方调用 subscribe 方法进行订阅
eventBus.subscribe('customEvent', (data) => {
console.log('Received data:', data);
});
// 在需要发布事件的地方调用 publish 方法进行发布
eventBus.publish('customEvent', 'Hello, EventBus!');