Missing from the benchmarks is simple deep copying:
function deepClone (obj) {
var clone = {}
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var value = obj[key]
switch (Object.prototype.toString.call(value)) {
case '[object Object]': clone[key] = deepClone(obj[key]); break
case '[object Array]' : clone[key] = value.slice(0); break
default : clone[key] = value
}
}
}
return clone
}
Hence 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.
We 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.
(naive implementation, but covers 90% of uses, see lodash for the full mess: https://github.com/lodash/lodash/blob/master/.internal/baseC...)