|
|
- import { isObject } from './isObject';
-
- interface Rename {
- [propName: string]: string;
- }
-
- interface Config {
- lowerFirst?: boolean;
- rename?: Rename;
- remove?: string[];
- camel?: string[];
- bool?: string[];
- }
-
- const TRUE = ['true', 'TRUE', '1', 1];
- const FALSE = ['false', 'FALSE', '0', 0];
-
- export function dataFix(o: object, conf: Config, finalKill?: Function) {
- if (!isObject(o)) return;
-
- const { remove = [], rename = {}, camel = [], bool = [], lowerFirst = false } = conf;
-
- // 删除不需要的数据
- remove.forEach(v => delete o[v]);
-
- // 重命名
- Object.entries(rename).forEach(v => {
- if (!o[v[0]]) return;
- if (o[v[1]]) return;
- o[v[1]] = o[v[0]];
- delete o[v[0]];
- });
-
- // 驼峰化
- camel.forEach(v => {
- if (!o[v]) return;
- const afterKey = v.replace(/^(.)/, $0 => $0.toLowerCase()).replace(/-(\w)/g, (_, $1) => $1.toUpperCase());
- if (o[afterKey]) return;
- o[afterKey] = o[v];
- // todo 暂时兼容以前数据,不做删除
- // delete o[v];
- });
-
- // 转换值为布尔值
- bool.forEach(v => {
- o[v] = fixBool(o[v]);
- });
-
- // finalKill
- if (typeof finalKill === 'function') {
- finalKill(o);
- }
-
- // 首字母转小写
- fixLowerFirst(o, lowerFirst);
-
- return dataFix;
- }
-
- function fixBool(value) {
- if (!value) return false;
-
- if (TRUE.includes(value)) return true;
-
- return FALSE.includes(value) ? false : value;
- }
-
- function fixLowerFirst(o, lowerFirst) {
- if (lowerFirst) {
- Object.keys(o).forEach(key => {
- const lowerK = key.replace(/^\w/, match => match.toLowerCase());
- if (typeof o[lowerK] === 'undefined') {
- o[lowerK] = o[key];
- delete o[key];
- }
- });
- }
- }
|