Skip to content
鼓励作者:欢迎打赏犒劳

15-字符串工具类

下划线转驼峰

js
//将下划线命名(snake_case)转换为驼峰命名(camelCase)
function snakeToCamel(snakeCase) {
    return snakeCase
        .toLowerCase() // 转换为小写
        .replace(/_./g, match => match.charAt(1).toUpperCase()); // 用正则转换下划线后面的字母为大写
}

// 测试函数
console.log(snakeToCamel("hello_world")); // 输出: helloWorld
console.log(snakeToCamel("convert_this_string")); // 输出: convertThisString

下划线转类名

js
function toPascalCase(snakeString) {
  return snakeString
    .split('_') // 将字符串按'_'分割成数组
    .map((word, index) => 
      word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() // 每个单词首字母大写,其余小写
    )
    .join(''); // 将数组元素连接成一个字符串
}

// 测试函数
console.log(toPascalCase("hello_world")); // 输出: HelloWorld
console.log(toPascalCase("convert_this_string")); // 输出: ConvertThisString

json格式化

js
let result = {"name":"卡卡罗特"}
console.log(JSON.stringify(result))
// 美化显示
console.log(JSON.stringify(result, null, 2))

压缩格式化

需求:js默认格式化展的会很开,不美观,想紧凑些

js
let data = {"entity": "保鲜盒", "all_val": [{"prop": "适用场景", "valList": ["厨房", "冰箱", "家庭"]}, {"prop": "作用对象", "valList": ["食品", "蔬菜", "饭菜"]}, {"prop": "颜色", "valList": ["透明", "白", "银"]}, {"prop": "功能", "valList": ["储存", "保鲜"]}, {"prop": "材质", "valList": ["塑料"]}, {"prop": "物理特性", "valList": ["密封", "耐用", "透明"]}, {"prop": "风格", "valList": ["简约"]}, {"prop": "款式", "valList": ["分格", "带盖", "翻盖式"]}], "hit_val": [{"prop": "适用场景", "valList": ["厨房", "冰箱", "家庭"]}, {"prop": "作用对象", "valList": ["食品", "饭菜"]}, {"prop": "功能", "valList": ["保鲜", "储存"]}, {"prop": "材质", "valList": ["塑料"]}, {"prop": "物理特性", "valList": ["透明", "密封"]}, {"prop": "款式", "valList": ["带盖"]}], "hit_val_rate": 0.57, "cut_hot_sale_cpv": true, "cut_min_hit_rate": 0.5, "cut_hot_sale_cpv_v1_size": 154, "cut_hot_sale_cpv_v2_size": 50, "cut_hot_sale_cpv_v1_filter_choice_size": 149}

// 自定义美化函数
function customStringify(obj, inline = false) {
    if (obj === null || typeof obj !== 'object') {
        // 基本类型直接使用 JSON.stringify
        return JSON.stringify(obj);
    }

    if (Array.isArray(obj)) {
        // 数组处理:根据 inline 参数决定是否多行显示
        const elements = obj.map(item =>
            customStringify(item, inline)  // 使用当前 inline 参数
        );

        if (inline) {
            // 内联模式:数组元素在一行
            return `[${elements.join(', ')}]`;
        } else {
            // 多行模式:每个数组元素单独一行
            return `[\n  ${elements.join(',\n  ')}\n]`;
        }
    }

    // 对象处理:强制属性值为内联模式
    const entries = Object.entries(obj);
    const formattedEntries = entries.map(([key, value]) => {
        const valStr = customStringify(value, true);  // 强制属性值为内联
        return inline
            ? `"${key}": ${valStr}`           // 内联模式
            : `  "${key}": ${valStr}`;         // 多行模式
    });

    if (inline) {
        // 内联模式:整个对象单行显示
        return `{ ${formattedEntries.join(', ')} }`;
    } else {
        // 多行模式:键值对分行显示
        return `{\n  ${formattedEntries.join(',\n  ')}\n  }`;
    }
}
console.log(customStringify(data))

如有转载或 CV 的请标注本站原文地址