2013-10-04 3 views
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 

Пожалуйста, предложите что-нибудь элегантное и чистое.

Update:

После прохождения lodash Lib больше я нашел лучший способ -

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

Я хотел найти лучшее решение. – Tushar

ответ

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 делать рекурсию, но я бы вряд ли назвал ее более элегантным или лучше.

Смежные вопросы