有没有办法以更有效的方式执行以下操作?
(我使用咖啡脚本,所以也许还有一个特定于咖啡脚本的解决方案?..)
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
等等——我不知道它还包含什么(也不想知道),我只需要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()
函数;它们甚至支持对象键中的数组。