/** * @description 对象的处理 */ import { set } from 'vue-demi' import { isObject } from './validate' interface MapItem { formData: Record; key: string; } const mapDispose = { // key是否存在 hasKey(formData = {}, key = '') { const keys = key.split('.') if (keys.length === 1) return Object.keys(formData).includes(key) else { let curr = formData for (let i = 0; i < keys.length; i++) { const k = keys[i] if (!curr || !Object.keys(curr).includes(k)) return false curr = curr[k] } return true } }, // 删除key delKey(formData = {}, key = '') { const isKey = this.hasKey(formData, key) if (isKey) { const keys = key.split('.') let curr = formData for (let i = 0; i < keys.length - 1; i++) { const key = keys[i] curr = curr[key] } const lastKey = keys[keys.length - 1] delete curr[lastKey] } }, // 获取value getValue(formData = {}, key = '') { const keys = key.split('.') if (keys.length === 1) return formData[key] else { let curr = formData for (let i = 0; i < keys.length; i++) { const k = keys[i] if (!curr || curr[k] === undefined) return undefined curr = curr[k] } return curr } }, // 设置值 setValue(formData = {}, key = '', val) { const keys = key.split('.') if (keys.length === 1) { set(formData, key, val) } else { let curr = formData for (let i = 0; i < keys.length - 1; i++) { const key = keys[i] if (!curr[key]) { set(curr, key, {}) } curr = curr[key] } const lastKey = keys[keys.length - 1] set(curr, lastKey, val) } }, /** * 递归设置值 * @param {Boolean} cover 强制覆盖赋值 */ setRecursionValue(formData = {}, map = {}, cover = false) { for (const key in map) { if (isObject(map[key])) { if (!formData[key]) { set(formData, key, {}) } this.setRecursionValue(formData[key], map[key]) } else if (cover || (!this.hasKey(formData, key))) { set(formData, key, map[key]) } } }, // 递归删除key delRecursionValue( formData: Record = {}, map: Record = {}, mapList: MapItem[] = [], num: number = 1 ) { for (const key in map) { if (isObject(map[key])) { mapList.push({ formData, key }) this.delRecursionValue(formData[key], map[key], mapList, num + 1) } else { delete formData[key] } } if (num === 1) { // 避免多次执行 mapList.forEach(item => { if (Object.keys(item.formData[item.key]).length === 0) { delete (item.formData)[item.key] } }) } } } export default mapDispose