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

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

关于javascript - 将对象的孙子属性复制到新创建的对象,无需太多代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35338813/

相关文章:

javascript - 如何将 javascript 字符串拆分成最多 2 个部分?

javascript - 每 x 个字符强制换行,但保留单词不被剪切

javascript - Julia 在 Javascript 中设置

javascript - Knockout.js 与 CoffeeScript、继承、对象实例化

javascript - 找到 CoffeeScript 行

javascript - Coffeescript 解析意外错误 '.'

javascript - 数据绑定(bind)到 flexbox

javascript - 使用固定的左 div 水平滚动

javascript - 为什么这个 knockout 方法接收的是一个表单元素而不是它嵌套的对象?

javascript - 如何针对任何标题稳健地解析文档并构建仅包含这些标题的 <ul> 树