个人开发助手

常用代码片段

收集常用的代码模板和片段,快速复用

JavaScript - 防抖函数

用于限制函数的执行频率,常用于搜索框输入、滚动事件等场景

function debounce(func, wait) {
    let timeout;
    return function(...args) {
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(this, args), wait);
    };
}

JavaScript - 节流函数

用于限制函数在指定时间内的执行次数,常用于滚动、resize 等高频事件

function throttle(func, limit) {
    let inThrottle;
    return function(...args) {
        if (!inThrottle) {
            func.apply(this, args);
            inThrottle = true;
            setTimeout(() => inThrottle = false, limit);
        }
    };
}

JavaScript - 深拷贝

实现对象的深拷贝,避免引用问题

function deepClone(obj) {
    if (obj === null || typeof obj !== 'object') return obj;
    if (obj instanceof Date) return new Date(obj);
    if (obj instanceof Array) return obj.map(item => deepClone(item));
    if (obj instanceof Object) {
        const clonedObj = {};
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                clonedObj[key] = deepClone(obj[key]);
            }
        }
        return clonedObj;
    }
}

JavaScript - Promise 封装

将回调函数封装为 Promise,便于使用 async/await

function promisify(fn) {
    return function(...args) {
        return new Promise((resolve, reject) => {
            fn.call(this, ...args, (err, result) => {
                if (err) reject(err);
                else resolve(result);
            });
        });
    };
}

CSS - Flexbox 居中

使用 Flexbox 实现水平和垂直居中

.container {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
}

CSS - 文本溢出省略

单行和多行文本溢出显示省略号

/* 单行文本溢出 */
.single-line {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 多行文本溢出 */
.multi-line {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}

JavaScript - 数组去重

多种方式实现数组去重

// 方法1: 使用 Set
const unique1 = [...new Set(array)];

// 方法2: 使用 filter
const unique2 = array.filter((item, index) => array.indexOf(item) === index);

// 方法3: 使用 reduce
const unique3 = array.reduce((acc, current) => {
    return acc.includes(current) ? acc : [...acc, current];
}, []);

JavaScript - 格式化日期

将日期格式化为指定格式的字符串

function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
    const d = new Date(date);
    const year = d.getFullYear();
    const month = String(d.getMonth() + 1).padStart(2, '0');
    const day = String(d.getDate()).padStart(2, '0');
    const hours = String(d.getHours()).padStart(2, '0');
    const minutes = String(d.getMinutes()).padStart(2, '0');
    const seconds = String(d.getSeconds()).padStart(2, '0');

    return format
        .replace('YYYY', year)
        .replace('MM', month)
        .replace('DD', day)
        .replace('HH', hours)
        .replace('mm', minutes)
        .replace('ss', seconds);
}

JavaScript - 本地存储封装

封装 localStorage 操作,支持对象存储

const storage = {
    set(key, value) {
        localStorage.setItem(key, JSON.stringify(value));
    },
    get(key) {
        const item = localStorage.getItem(key);
        return item ? JSON.parse(item) : null;
    },
    remove(key) {
        localStorage.removeItem(key);
    },
    clear() {
        localStorage.clear();
    }
};

JavaScript - 生成随机字符串

生成指定长度的随机字符串

function randomString(length = 8) {
    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    for (let i = 0; i < length; i++) {
        result += chars.charAt(Math.floor(Math.random() * chars.length));
    }
    return result;
}