js的克隆方法(消除数据引用的一些影响)
2018-03-18 14:25
295 查看
引用类型数据,当多个变量引用同一个数据,改变一个变量的值,所有变量的引用都将改变,如果只想改变当前变量而不影响其他引用,需要将对象克隆来使用。
说一下我为什么用的的这个方法:在reactjs中,数据改变页面会重新渲染,但是我将数组中某个引用的对象值改变,页面没有重新渲染,原因是数组存储的引用值未变,reactjs认为数据没有变化。
// 数据的克隆(同时能够消除数据引用对代码流程带来的一些影响)
clone ( obj ) {
let o = null;
if ( typeof obj == 'object' ) {
if ( obj === null ) {
o = null;
} else if ( obj instanceof Array ) {
o = [];
for ( let i = 0, len = obj.length; i < len; i++ ) {
o.push( this.clone( obj[ i ] ) );
}
} else {
o = {};
for ( const j in obj ) {
o[ j ] = this.clone( obj[ j ] );
}
}
} else {
o = obj;
}
return o;
}
说一下我为什么用的的这个方法:在reactjs中,数据改变页面会重新渲染,但是我将数组中某个引用的对象值改变,页面没有重新渲染,原因是数组存储的引用值未变,reactjs认为数据没有变化。
// 数据的克隆(同时能够消除数据引用对代码流程带来的一些影响)
clone ( obj ) {
let o = null;
if ( typeof obj == 'object' ) {
if ( obj === null ) {
o = null;
} else if ( obj instanceof Array ) {
o = [];
for ( let i = 0, len = obj.length; i < len; i++ ) {
o.push( this.clone( obj[ i ] ) );
}
} else {
o = {};
for ( const j in obj ) {
o[ j ] = this.clone( obj[ j ] );
}
}
} else {
o = obj;
}
return o;
}
相关文章推荐
- JS中的两种数据类型及实现引用类型的深拷贝的方法
- Vue.js 表格数据绑定 一些方法
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
- js赋值改变后原来的东西也改变了,影响了好几个其它使用同一个源数据的原因以及解决方法
- js处理数据的一些方法
- 关键字加亮--JS方法(现在很多文章生成html那想在文章里把某些字,做一些标释)
- js入门·动态的时钟,显示完整的一些方法,新年倒计时
- 一些常用的js方法(转载)
- 实现ajax时一些跨浏览器的js方法
- js innerHTML 的一些问题的解决方法
- 介绍ASP.NET页面之间数据传递的几种方法,并介绍一些这些方法的优缺点?
- 终于搞懂js中cookie的一些处理方法。
- 关于用js自动postback.自动提交数据(不用点击按钮)的方法 button,linkbutton
- Web客户端Js访问不同域中数据的解决方法
- js innerHTML 的一些问题的解决方法
- js中一些常用的基本方法
- JS获取字符个数(中/英文识别)的一些方法
- 一些有关检查数据的JS代码
- 一些有关检查数据的JS代码
- JS 的一些高级方法或属性