Skip to content
On This Page

手写题[JavaScript][工具类]

1. 深拷贝

2. 数组去重

3. 数组排序

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]

5. 节流和防抖

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()}`);

7. 发布订阅模式

  1. 创建一个名为 eventBus 的事件总线对象,它具有 subscribe 和 publish 两个方法,分别用于订阅事件和发布事件。
  2. 当某个地方调用 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!');

8. Promise.all