Ember copy array

本文探讨了Ember.js中使用makeArray和copy方法进行深拷贝的问题,并发现这两种方式都不能实现真正的深拷贝。文章最终提供了一种有效的解决方案:通过map结合Ember.copy方法并设置第二个参数为true来实现。
Ember 不支持深度Copy

                var dpItemDataCopy = Ember.makeArray(dpItemData);

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

                delete dpItemDataCopy[0].links;

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

console的结果简略给出

Object 
Object 
undefined
undefined

我只删除Copy后数组第一个Object的links,但原始数组的第一个Object的links也被删除掉;


                var dpItemDataCopy = Ember.makeArray(dpItemData);

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

                delete dpItemDataCopy[0].links;

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

既然copy不管用,换makeArray试试,但是结果还是一样的;
网上讲这是Ember的一个bug

最后解决办法


                var dpItemDataCopy = dpItemData.map(function(item) {
                    return Ember.copy(item, true)
                });

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

                delete dpItemDataCopy[0].links;

                console.log(dpItemData[0].links);
                console.log(dpItemDataCopy[0].links);

console结果

    Object
    Object
    Object
    undefined
结论
  • Ember copy和makeArray不支持deep复制数组
  • 若想要真正copy一个数组,可以采用上面的方式,Ember后续应该会给出新的api
参考

http://stackoverflow.com/questions/9693154/native-array-in-emberjs-does-not-support-deep-copy

转载于:https://www.cnblogs.com/penggy/p/7475833.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值