Deep spread operator (Bilal Abdullah)

Jamie me at thejameskyle.com
Tue Oct 23 19:22:40 UTC 2018


4 dots is already valid syntax when it has a number after it

let o = { ....4 }


On Tue, Oct 23, 2018 at 9:05 AM kai zhu <kaizhu256 at gmail.com> wrote:

> 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> 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> 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>
>>> 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
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>> --
>>>
>>> Henrique
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> 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/086b8f44/attachment-0001.html>


More information about the es-discuss mailing list