将对象的孙子属性复制到新创建的对象而没有太多代码

时间:2016-02-11 12:01:13

标签: javascript coffeescript

有没有办法以更有效的方式执行以下操作? (我使用coffeescript,所以也许还有一个coffeescript特定的解决方案?..)

oldObj =
  parent:
    child:
      grandchild: "I'm a grandchild!"
newObj =
  parent:
    child:
      grandchild: null
newObj.parent.child.grandchild = oldObj.parent.child.grandchild

我不能简单地newObj.parent = oldObj.parent,因为oldObj.parent可能包含anotherChildyetAnotherChild等等 - 而且我不知道它包含的是什么(并且不知道#39;我想知道),我只需要child

2 个答案:

答案 0 :(得分:1)

您可以创建一般递归函数来向对象添加属性

oldObj =
    parent:
        child:
            grandchild: "I'm a grandchild!"

addPropertyToObject = (obj, property, valueProperty) ->
    if typeof property == 'string'
        property = property.split(".")

    obj[property[0]] = obj[property[0]] || {}
    tmpObj = obj[property[0]]

    if property.length > 1
        property.shift()
        addPropertyToObject tmpObj, property, valueProperty
    else
        obj[property[0]] = valueProperty
    obj

newObj = addPropertyToObject {}, "parent.child.grandchild", oldObj.parent.child.grandchild

答案 1 :(得分:0)

Lodash为此提供set()get()个功能;他们甚至支持对象键中的数组。