深度克隆一个对象

时间:2013-10-04 07:56:06

标签: javascript coffeescript underscore.js lodash

假设我有一个看起来像这样的对象 -

data = 
    a: 1
    b: 2
    c:
        d: 3
        e: 4
        f:
            g: 4
            h:
                i: 9

我想编写一个函数,它基本上克隆了这个对象,但用10的最小倍数替换数字。

a: 10
b: 20
c:
    d: 30
    e: 40
    f:
        g: 40
        h:
            i: 90

我想使用lodash或下划线来编写最少量的代码。这就是我目前所做的事情 -

execute = (key) ->
#console.log typeof key, key
if typeof key is 'number'
    return key * 10

result = {}
_.forIn key, (value, name) ->
    result[name] = execute value
return result

请推荐一些优雅干净的东西。

更新

经过lodash lib后,我找到了更好的方法 -

_.cloneDeep data,(value) -> value * 10 if typeof value is 'number'

1 个答案:

答案 0 :(得分:0)

execute的纯咖啡版

foo = (data, out={})->
  if typeof data is 'number'
    return data*10
  for k of data
    out[k] = foo(data[k])
  return out
foo(data)

这样的递归表达式就像它们来的一样优雅。你的_.deepClone更紧凑,因为它让lo-dash做递归,但我几乎不称它为优雅或更好。