import DictOptions from './DictOptions' import DictData from './DictData' export default function dictConverter(dict, dictMeta) { const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) const children = determineDictField(dict, dictMeta.childrenField, ...DictOptions.DEFAULT_CHILDREN_FIELDS) // 递归处理子字典 const childDicts = dict[children] let childDictData = [] if (childDicts && childDicts.length > 0) { childDictData = childDicts.map(childDict => dictConverter(childDict, dictMeta)) } return new DictData(dict[label], dict[value], dict, childDictData) // return new DictData(dict[label], dict[value], dict, dict[children]) } /** * 确定字典字段 * @param {DictData} dict * @param {...String} fields */ function determineDictField(dict, ...fields) { return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) }