将对象的孙属性复制到新创建的对象,而无需太多代码

Copy object's grandchild property to a newly created object without much code

本文关键字:对象 太多 代码 创建 孙属性 属性 复制 新创建      更新时间:2023-09-26

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

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等等——我不知道它还包含什么(也不想知道),我只需要child.

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

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

Lodash为此提供了set()get()函数;它们甚至支持对象键中的数组。