jsly 3.0.2 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -130,15 +130,27 @@ try {
130
130
  ### 字符串与对象命名转换
131
131
 
132
132
  ```javascript
133
- import { camelToSnake, snakeToCamel, toggleConvertCase, convertObjKeysToCamel } from 'jsly'
133
+ import { camelToSnake, snakeToCamel, toggleConvertCase, convertKeys } from 'jsly'
134
134
 
135
+ // 字符串转换
135
136
  console.log(camelToSnake('myVariable')) // my_variable
136
137
  console.log(snakeToCamel('my_variable')) // myVariable
137
138
  console.log(toggleConvertCase('myVariable')) // my_variable
138
139
  console.log(toggleConvertCase('my_variable')) // myVariable
139
140
 
140
- const obj = { my_variable: 123, another_key: 'abc' }
141
- console.log(convertObjKeysToCamel(obj)) // { myVariable: 123, anotherKey: 'abc' }
141
+ // 对象键名转换(默认只转换首层)
142
+ console.log(convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel'))
143
+ // => { userName: 'Tom', userInfo: { phone_number: '123' } }
144
+
145
+ // 递归转换所有层级
146
+ console.log(convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel', true))
147
+ // => { userName: 'Tom', userInfo: { phoneNumber: '123' } }
148
+
149
+ console.log(convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake'))
150
+ // => { user_name: 'Tom', user_info: { phoneNumber: '123' } }
151
+
152
+ console.log(convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake', true))
153
+ // => { user_name: 'Tom', user_info: { phone_number: '123' } }
142
154
 
143
155
  ```
144
156
 
package/dist/index.cjs.js CHANGED
@@ -7351,39 +7351,47 @@ function toggleConvertCase(str) {
7351
7351
  }
7352
7352
 
7353
7353
  /**
7354
- * 递归转换对象或数组的键名格式
7355
- *
7356
- * @param {object|array} data - 需要转换的对象或数组
7357
- * @param {'camel'|'snake'} type - 指定目标格式:'camel' 转小驼峰;'snake' 转下划线
7358
- * @returns {object|array} - 转换后的新对象或数组
7354
+ * 转换对象的键名格式(支持可选递归)
7355
+ *
7356
+ * @param {object} obj - 需要转换的对象
7357
+ * @param {'camel'|'snake'} targetType - 目标格式:'camel' 转小驼峰;'snake' 转下划线
7358
+ * @param {boolean} [deep=false] - 是否递归转换(默认 false,仅转换首层)
7359
+ * @returns {object} - 转换后的新对象
7359
7360
  *
7360
7361
  * @example
7361
7362
  * convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel')
7363
+ * // => { userName: 'Tom', userInfo: { phone_number: '123' } }
7364
+ *
7365
+ * @example
7366
+ * convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel', true)
7362
7367
  * // => { userName: 'Tom', userInfo: { phoneNumber: '123' } }
7363
7368
  *
7364
7369
  * @example
7365
7370
  * convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake')
7371
+ * // => { user_name: 'Tom', user_info: { phoneNumber: '123' } }
7372
+ *
7373
+ * @example
7374
+ * convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake', true)
7366
7375
  * // => { user_name: 'Tom', user_info: { phone_number: '123' } }
7367
7376
  */
7368
- function convertKeys(data, type = 'camel') {
7369
- if (data === null || typeof data !== 'object') {
7370
- return data; // 原始类型直接返回
7377
+ function convertKeys(obj, targetType = 'camel', deep = false) {
7378
+ if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
7379
+ throw new Error('convertKeys 仅支持对象类型');
7371
7380
  }
7372
- if (!['camel', 'snake'].includes(type)) {
7373
- throw new Error("convertKeys type must be 'camel' or 'snake'.");
7381
+ if (!['camel', 'snake'].includes(targetType)) {
7382
+ throw new Error("convertKeys targetType 必须是 'camel' 'snake'");
7374
7383
  }
7384
+ const result = {};
7385
+ for (const [key, value] of Object.entries(obj)) {
7386
+ const newKey = targetType === 'camel' ? snakeToCamel(key) : camelToSnake(key);
7375
7387
 
7376
- // 处理数组
7377
- if (Array.isArray(data)) {
7378
- return data.map(item => convertKeys(item, type));
7388
+ // 如果开启递归并且值是对象,则递归转换
7389
+ if (deep && value && typeof value === 'object' && !Array.isArray(value)) {
7390
+ result[newKey] = convertKeys(value, targetType, deep);
7391
+ } else {
7392
+ result[newKey] = value;
7393
+ }
7379
7394
  }
7380
-
7381
- // 处理对象
7382
- const result = {};
7383
- Object.entries(data).forEach(([key, value]) => {
7384
- const newKey = type === 'camel' ? snakeToCamel(key) : camelToSnake(key);
7385
- result[newKey] = convertKeys(value, type);
7386
- });
7387
7395
  return result;
7388
7396
  }
7389
7397