
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))