2

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

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'
4

1 回答 1

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 进行递归,但我几乎不会称它为更优雅或更好。

于 2013-10-08T01:00:41.887 回答