UNPKG

web-utils-curd

Version:

前端工具包

80 lines (79 loc) 2.45 kB
/** * 封装操作对象的方法 */ class ObjectTool { mergeObject(...args: any) { // 声明一个空对象 const result: any = {}; // 遍历所有的参数对象 args.forEach((obj:any) => { // 获取当前对象所有的属性 Object.keys(obj).forEach((key) => { // 检测 result 是否存在 key 属性 if (result.hasOwnProperty(key)) { result[key] = [].concat(result[key], obj[key]); } else { // 如果没有 则直接写入 result[key] = obj[key]; } }); }); return result; } /** * 浅拷贝 * @param target 目标对象 * @returns 拷贝过后的对象 */ clone(target: any) { // 类型判断 if (typeof target === "object" && target !== null) { // 判断数据是否为数组 if (Array.isArray(target)) { return [...target]; } else { return { ...target }; } } else { return target; } }; /** * 深拷贝,解决了循环引用问题 * @param target 目标对象 * @param map map * @returns 返回拷贝后的对象 */ deepClone(target: any, map = new Map()) { // 检测数据类型 if (typeof target === "object" && target !== null) { // 克隆数据之前,进行判断,数据是否之前克隆过 let cache = map.get(target); if (cache) { return cache; } // 创建一个容器 let isArray = Array.isArray(target); const result: any = isArray ? [] : {}; // 将新的结果存入到容器中 map.set(target, result); // 遍历元素 // 如果目标数据为数组使用 forEach if (isArray) { // forEach 遍历 target.forEach((item: any, index: number) => { result[index] = this.deepClone(item, map); }); } else { // 如果是对象 Object.keys(target).forEach((key) => { result[key] = this.deepClone(target[key], map); }); } return result; } else { return target; } } } export default new ObjectTool();