距开课0天0时0分-10268546秒
扔个三星炸死你2017-07-05 11:04:38 0 4 440
[JavaScript讨论组]举报回复话题 ↕
代码中得到一个数组arr=[1,2,3];因为马上会被销毁,所以不能直接赋值给对象Obj.a,请问这种情况jquery如何写,使得arr销毁之后Obj.a=[1,2,3]?
4
0
分享
仅有的幸福 2017-07-05 11:06:384楼
一般情况下很少会在 JS 中遇到“销毁”。然后,我不明白你所谓的立即销毁是指什么?
如果是指 delete arr,那么直接赋值也不会有问题,如下图:
delete arr
如果你是要改变 arr 的内容。那么可以复制一个数组(有几种方法,concat 只是其中一种)
arr
concat
Obj.a = [].concat(arr);
如果确实需要深拷贝,jQuery.fn.clone(),不过貌似有一些限制。
如果其它数据,自己写深拷贝还是有点难度也比较麻烦,不如用 Lodash 的 cloneDeep()
赞 +0添加回复
PHP中文网 2017-07-05 11:06:383楼
拷贝数组:
obj.a = arr.slice();
obj.a = JSON.parse( JSON.stringify(arr) );
巴扎黑 2017-07-05 11:06:382楼
没看懂你销毁的意思。。。。至于深拷贝:
function cloneObj(obj){ if( !obj || typeof obj == "string" ){ return obj; } else if ( obj instanceof Array ){ return [].concat(obj); } else { var tempObj = {}; for( var key in obj ){ tempObj[key] = cloneObj(obj[key]); } return tempObj; } }
滿天的星座 2017-07-05 11:06:381楼
如果你使用 ES2015 的话,可以使用对象展开运算符来拷贝。
obj.a = [...arr]
仅有的幸福 2017-07-05 11:06:384楼
一般情况下很少会在 JS 中遇到“销毁”。然后,我不明白你所谓的立即销毁是指什么?
如果是指
delete arr
,那么直接赋值也不会有问题,如下图:如果你是要改变
arr
的内容。那么可以复制一个数组(有几种方法,concat
只是其中一种)如果确实需要深拷贝,jQuery.fn.clone(),不过貌似有一些限制。
如果其它数据,自己写深拷贝还是有点难度也比较麻烦,不如用 Lodash 的 cloneDeep()
赞 +0添加回复
PHP中文网 2017-07-05 11:06:383楼
拷贝数组:
利用 slice
利用 JSON
赞 +0添加回复
巴扎黑 2017-07-05 11:06:382楼
没看懂你销毁的意思。。。。
至于深拷贝:
赞 +0添加回复
滿天的星座 2017-07-05 11:06:381楼
如果你使用 ES2015 的话,可以使用对象展开运算符来拷贝。
赞 +0添加回复