Deep spread operator (Bilal Abdullah)

kai zhu kaizhu256 at gmail.com
Tue Oct 23 16:04:49 UTC 2018


hi Bilai, there’s no reliable way to deep-copy arbitrary js-objects. the most practical “general” solution is two-step:

1. deep-copy JSON-data first, e.g. ```var bb = JSON.parse(JSON.stringify(aa))```
2. custom-copy non-JSON-data in a second-pass, e.g. ```bb.innerObj.func = aa.innerObj.func```

like this real-world example [1]:

```javascript
local.jsonCopy = function (obj) {
/*
 * this function will [JSON] deep-copy obj
 */
    return obj === undefined
    ? undefined
    : JSON.parse(JSON.stringify(obj));
};
...
// update apiDict
self = local.apiDict[key.join('.')] = local.apiDict[self._methodPath] =
    local.jsonCopy(self); // step 1 - deep-copy JSON-data first
// init ajax
self.ajax = function (swaggerJson, onError) { // step 2 - custom-copy/add non-JSON-data in second-pass
    return local.apiAjax(self, swaggerJson, onError);
};
```

[1] deep-copy swagger client-object with functions
https://github.com/kaizhu256/node-swgg/blob/2018.9.8/lib.swgg.js#L2181

kai zhu
kaizhu256 at gmail.com



> On 23 Oct 2018, at 10:25 PM, Naveen Chawla <naveen.chwl at gmail.com> wrote:
> 
> Correction, suppose const b = { a : b } . Circular references can be cloned trivially, as far as I can tell
> 
> On Tue, 23 Oct 2018 at 20:52 Naveen Chawla <naveen.chwl at gmail.com <mailto:naveen.chwl at gmail.com>> wrote:
> Is there any real problem with circular reference cloning? I don't see any, Please let me know in the simplest case e.g. { a: a } (obviously contrived syntax here)
> 
> Otherwise, I agree completely about the 4 dots being the wrong syntax for this, precisely for the reason you gave
> 
> On Tue, 23 Oct 2018 at 18:18 Henrique Barcelos <rick.hjpbarcelos at gmail.com <mailto:rick.hjpbarcelos at gmail.com>> wrote:
> IMO, this would be very problematic.
> 
> 1. 4 dots are visually almost identical to 3 dots. This could introduce severe bugs because of a simple hard to spot typo.
> 
> 2. Deep traversing will always have performance problems in some cases. Dealing with circular references can take this issue even further.
> 
> I believe such functionality should be used in very specific situations, where object shape is well-known, not very deep and definitely not circular. So, supporting this at the core of the language will probably be frowned upon by the community.
> 
> Em ter, 23 de out de 2018 08:57, Ahad Cove <ahadcove at gmail.com <mailto:ahadcove at gmail.com>> escreveu:
> Hello Scripters,
> 
> I really appreciate everything you all have done for the language and have no complaints over here.
> I do have a suggestion though :)
> 
> At work we’ve almost got rid of lodash, except we still need it for DeepCopy vs rolling our own.
> It’s the same with my side projects. I don’t use lodash because the main times that I need deep copy is when I’m either digging into the Redux store using React, or copying an observable in the Angular world.
> 
> I believe ES Script users would appreciate having a deep copy spread operator tremendously.
> 
> My proposal is to go off of the current spread operator we currently have in ES and make it 4 dots for a deep spread. This can be used on Objects or Arrays.
> 
> ‘’’js
> const oldDeepObj = {
>   InnerObj: {
>        func: () => return ‘wow’
>    }
> }
> 
> const obj = {....oldDeepObj}
> obj.innerObj.func = () => return ‘nice’
> 
> oldDeepObj.innerObj.func()
> > wow
> ‘’’
> 
> Thank you!
> Looking forward to hearing back from you all.
> If there’s any other questions let me know
> 
> - Bilal Abdullah
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
> https://mail.mozilla.org/listinfo/es-discuss <https://mail.mozilla.org/listinfo/es-discuss>
> -- 
> Henrique
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
> https://mail.mozilla.org/listinfo/es-discuss <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20181023/7c785d33/attachment.html>


More information about the es-discuss mailing list