Vuex篇-两对象合并为一个对象,浅拷贝与深拷贝

在后台项目中,我总会遇到一些不能立刻解决的问题,这里总结了一部分:

  • 当进行调用获取用户详情数据时,可能会遇到获取的基本信息不足的情况,可能需要在此基础上继续获取用户详情
    这时我们可以选择再次封装一个通过id获取的接口
    接口代码如下:
// api/user.js
import request from '@/utils/request'

// 获取用户基本资料
export function getUserInfo() {
  return request({
    method: 'post',
    url: '/sys/profile'
  })
}

// 根据 id 获取用户详情
export function getUserDetailById(id) {
  return request({
    url: '/sys/user/' + id // 字符串
  })
}

接口代码调用如下:

// store/mudules/user.js

import { login, getUserInfo, getUserDetailById } from '@/api/user'
const mutations = {
  // 存储用户信息
  async setUserInfo(state, data) {
    state.userInfo = { ...data }
  },

// 调用获取用户信息
  async getUserInfo(store) {
    // 获取基本信息这里不够
    // 还需要在此之后获取详情
    const simpleData = await getUserInfo()
    const detail = await getUserDetailById(simpleData.userId)
    // 合并对象 成为一个新对象
    const data = { ...simpleData, ...detail }
    store.commit('setUserInfo', data)
  }

项目进行到这里,我们需要对项目数据进行修改,可以看出:这里将两个对象合并一个新对象

  1. 总结:
    • 对于两个对象合并为一个新对象,可以对两个对象打散,即**…obj**
    • 然后将两个被打散的对象存放在一个新对象中,即得到一个合并的新对象
      当然:对象的合并方法不止一种,如:
  2. 方法二:
    • $.extend()
      在这里插入图片描述
  3. 遍历赋值
var obj1={'a':1};
var obj2={'b':2};
for(var key in obj2){
 // hasOwnProperty 是判断自有属性,即在当前对象中查找是否拥有某个属性,
 // 当我们在使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰
     if(obj2.hasOwnProperty(key)===true){   
           obj1[key]=obj2[key];
} 
}
 
console.log(obj1);//{'a':1,'b':2};
  1. 对象的深拷贝和浅拷贝
  • 浅拷贝
let obj1={'a':1};
let obj2={'b':{'b1':22,'b2':33}};
 
// obj2 的属性是从 obj1 中进行拷贝得到的
$.extend(obj1, obj2);   

console.log(obj1)  // {'a':1,'b'{'b1':22,'b2':33}}
console.log(obj1.b.b1)  // 22
 
// obj2重新赋值
obj2.b.b1=44;   
console.log(obj1.b.b1)  // 44  obj1.b 只拷贝了对象的指引,所以受原obj2的影响
  • 深拷贝
let obj1={'a':1};
let obj2={'b':{'b1':22,'b2':33}};

//第一个参数设为true表示深拷贝,	若没有,则为浅拷贝,默认浅拷贝
$.extend(true,obj1, obj2);   

console.log(obj1)  // {'a':1,'b'{'b1':22,'b2':33}}
console.log(obj1.b.b1)  // 22
 
obj2.b.b1=44;   //obj2重新赋值
console.log(obj1.b.b1)  // 22 obj1拷贝了obj2的所有属性以及值,并不受obj2的影响
复制代码
  1. 回忆深拷贝与浅拷贝
    在这里插入图片描述
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值