You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
/** |
|
* 把对象按照 js配置文件的格式进行格式化 |
|
* @param obj 格式化的对象 |
|
* @param dep 层级,此项无需传值 |
|
* @returns {string} |
|
*/ |
|
function formatConfig(obj, dep) { |
|
dep = dep || 1 |
|
const LN = '\n', TAB = ' ' |
|
let indent = '' |
|
for (let i = 0; i < dep; i++) { |
|
indent += TAB |
|
} |
|
let isArray = false, arrayLastIsObj = false |
|
let str = '', prefix = '{', subfix = '}' |
|
if (Array.isArray(obj)) { |
|
isArray = true |
|
prefix = '[' |
|
subfix = ']' |
|
str = obj.map((item, index) => { |
|
let format = '' |
|
if (typeof item == 'function') { |
|
// |
|
} else if (typeof item == 'object') { |
|
arrayLastIsObj = true |
|
format = `${LN}${indent}${formatConfig(item,dep + 1)},` |
|
} else if ((typeof item == 'number' && !isNaN(item)) || typeof item == 'boolean') { |
|
format = `${item},` |
|
} else if (typeof item == 'string') { |
|
format = `'${item}',` |
|
} |
|
if (index == obj.length - 1) { |
|
format = format.substring(0, format.length - 1) |
|
} else { |
|
arrayLastIsObj = false |
|
} |
|
return format |
|
}).join('') |
|
} else if (typeof obj != 'function' && typeof obj == 'object') { |
|
str = Object.keys(obj).map((key, index, keys) => { |
|
const val = obj[key] |
|
let format = '' |
|
if (typeof val == 'function') { |
|
// |
|
} else if (typeof val == 'object') { |
|
format = `${LN}${indent}${key}: ${formatConfig(val,dep + 1)},` |
|
} else if ((typeof val == 'number' && !isNaN(val)) || typeof val == 'boolean') { |
|
format = `${LN}${indent}${key}: ${val},` |
|
} else if (typeof val == 'string') { |
|
format = `${LN}${indent}${key}: '${val}',` |
|
} |
|
if (index == keys.length - 1) { |
|
format = format.substring(0, format.length - 1) |
|
} |
|
return format |
|
}).join('') |
|
} |
|
const len = TAB.length |
|
if (indent.length >= len) { |
|
indent = indent.substring(0, indent.length - len) |
|
} |
|
if (!isArray || arrayLastIsObj) { |
|
subfix = LN + indent +subfix |
|
} |
|
return`${prefix}${str}${subfix}` |
|
} |
|
|
|
module.exports = {formatConfig}
|
|
|