3 ms·
I believe that it's faster, but only because it's not actually deep-cloning. This: value.slice(0); is a shallow clone; it makes a new array, but doesn't
by drodgers 9y ago
I believe that it's faster, but only because it's not actually deep-cloning.
This:
value.slice(0);
is a shallow clone; it makes a new array, but doesn't clone it's contents.
- ricardobeat 9y agoHence being a 'naive' implementation. You can replace that with something like `deepClone(value)` + implement copying for different types, ultimately you'll end up with code like lodash's.
- drodgers 9y agoIt's not just naive though, it's wrong; it won't even give you new objects although it seems like it's meant-to: a = [1, {foo: "bar"}]; b = a.slice(0); b[1].foo = "baz"; console.log(a) > [1, {foo: "baz"}] console.log(b) > [1, {foo: "baz"}] A naive implementation would do this: case '[object Array]' : clone[key] = value.map((item) => deepClone(item)); break And would thus be slower.
- ricardobeat 9y agoWe are in agreement here. My suggestion was to make the deepClone method also take arrays, and walk through them copying values in the for loop (significantly faster than map). Again, I linked to a full implementation at the end; was more commenting on the lack of this particular approach, wrote this on the spot as an example.