/** * JsonUtil计算操作工具类 * @author cls * @date 2021-01-30 * import { JsonUtil } from "@birt/funclib/JsonUtil" */ export const JsonUtil = { /** * 根据关键字获取,keys联合值 * @param {*} jo {k1:"1",k2:"a"} * @param {*} keys ["k1","k2"] * @param {*} split 可选 * * @return string "1a" */ joinKeysValue(jo, keys, split) { split = split || ""; let jv = ""; keys.forEach(k => { jv += jo[k] + split }) return jv; }, /** * 深度克隆配置,后面覆盖前面对象 * @param {*} sourceJson * @param {*} overrideJson */ deepMerge(sourceJson, overrideJson) { for (var key in overrideJson) { // 不冲突的,直接赋值 if (sourceJson[key] === undefined) { sourceJson[key] = overrideJson[key]; continue; } // 冲突了,如果是Object,看看有么有不冲突的属性 // 不是Object 则以(minor)为准为主, if (this.isJSON(overrideJson[key]) || Array.isArray(overrideJson[key])) { // arguments.callee 递归调用,并且与函数名解耦 // arguments.callee(sourceJson[key], overrideJson[key]) this.deepMerge(sourceJson[key], overrideJson[key]); } else { sourceJson[key] = overrideJson[key]; } } return sourceJson; }, // 克隆Json对象,包含函数 deepClone(jo, cloneJo = {}, arykey) { if (Array.isArray(jo)) { let cloneAry = [] jo.forEach((r, i) => { cloneAry.push({}); this.deepClone(r, cloneAry[i]) }) return cloneAry; } else { for (let key in jo) { if (typeof jo[key] == "object") { cloneJo[key] = this.deepClone(jo[key], cloneJo[key], key); } else { cloneJo[key] = jo[key]; } } return cloneJo; } }, isJSON(target) { if (target === null) { return false; } return (typeof target == "object") && (target.constructor == Object); }, // 获取关联字段列表,alias别名字段优先应用 getJoinFields(sourceFields, joinFields) { let retuFields = {}; let jFields = joinFields.split(","); jFields.forEach(f => { let sField = sourceFields[f]; if (sField) { let alias = sField.alias || f; retuFields[alias] = sField; } }); return JSON.parse(JSON.stringify(retuFields)); }, getMergeFields(...fields) { let mergeFieds = {}; fields.forEach(f => { Object.assign(mergeFieds, f); }) return mergeFieds; } };