有没有办法以更有效的方式执行以下操作? (我使用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
可能包含anotherChild
和yetAnotherChild
等等 - 而且我不知道它包含的是什么(并且不知道#39;我想知道),我只需要child
。
答案 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()
个功能;他们甚至支持对象键中的数组。