接收值的方法(拷贝)

打印 上一主题 下一主题

主题 977|帖子 977|积分 2946

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. state: {
  2.     // Reducer
  3.     test: 'Dva 数据流:dashboard/test',
  4.     data: [],
  5.     num: 1,
  6.     list: ['好好学习天天向上', 'good good study, day day up'],
  7.     tableDate: [
  8.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  9.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  10.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  11.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  12.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  13.       { id: 1, name: '张三', sex: '男', age: 22, birthday: '02-20', score: 90 },
  14.     ],
  15.   },
复制代码
  1. const { test = '', list = [], num = 0, dispatch } = props;
复制代码
//接收对象类型的对象值
解构赋值取值


 
 
const 新数组=[value, ...tableData] //value:对象 tabkeData:数组  该写法将value合并到数组中

 
const newData = [...tableData];//如果涉及对象的数组显示不正常则换用该方式赋值几乎能解决绝大多数   dataSource 不正常显示

浅拷贝:

浅拷贝就是只拷贝一层对象,如果有多层对象类型则需要使用深拷贝
Object.assign
  1. bject.assign(obj, source);
  2. //Object.assign 是 Object 的一个方法,该方法可以用于 JS 对象的合并等多个用途,其中一个用途就是可以进行浅拷贝。该方法的第一个参数是拷贝的目标对象,后面的参数是拷贝的来源对象(<br>也可以是多个来源)。
复制代码

  • 它不会拷贝对象的继承属性;
  • 它不会拷贝对象的不可枚举的属性;
  • 可以拷贝 Symbol 类型的属性。
扩展运算符
  1. const obj = {...source};
复制代码
上述代码和使用Object.assign功能相同,其注意事项也相同,两者在使用上基本是可以相互转换
 
Array.prototype.concat

数组的 concat 方法其实也是浅拷贝,使用场景比较少,使用concat连接一个含有引用类型的数组时,需要注意修改原数组中的元素的属性,因为它会影响拷贝之后连接的数组
Array.prototype.slice

数组的 slice 方法其实也是浅拷贝,使用场景比较少,同cancat
使用第三方库&手动实现

深拷贝

深拷贝就不会像浅拷贝那样只拷贝一层,而是有多少层我就拷贝多少层
基本数据类型:直接赋值即可

引用数据类型:

1、使用JSON.stringify()以及JSON.parse()
let _tmp = JSON.stringify(obj);//将对象转换为json字符串形式
let result = JSON.parse(_tmp);//将转换而来的字符串转换为原生js对象
  1. const obj=JSON.parse(JSON.stringify(object))
复制代码
2、通过for in实现
  1. function deepCopy1(obj) {
  2.   let o = {}
  3.   for(let key in obj) {
  4.     o[key] = obj[key]
  5.   }
  6.   return o
  7. }
  8. let obj = {
  9.   a:1,
  10.   b: undefined,
  11.   c:function() {},
  12. }
  13. console.log(deepCopy1(obj))
复制代码
3、递归    (自身调用自身)
使用递归的方式实现数组、对象的深拷贝
  1. function deepClone1(obj) {
  2.   //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
  3.   var objClone = Array.isArray(obj) ? [] : {};
  4.   //进行深拷贝的不能为空,并且是对象或者是
  5.   if (obj && typeof obj === "object") {
  6.     for (key in obj) {
  7.       if (obj.hasOwnProperty(key)) {
  8.         if (obj[key] && typeof obj[key] === "object") {
  9.           objClone[key] = deepClone1(obj[key]);
  10.         } else {
  11.           objClone[key] = obj[key];
  12.         }
  13.       }
  14.     }
  15.   }
  16.   return objClone;
  17. }
复制代码
4.concat(数组的深拷贝)
使用concat合并数组,会返回一个新的数组。
对象是一个引用数据类型 普通的复制是一个浅拷贝
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表