我正在尝试扩展以下结构的对象(在 Coffeescript 中使用 JQuery):
objectThatIsAList = {
'List Item' :
callback :=>
return "Some value"
'Another item' :
callback :=>
return "Another value"
'The final item' :
callback :=>
no
}
此对象用作大型基于咖啡脚本的框架中的下拉菜单的(动态)模型。
我正在扩展它
objectThatIsAList = $.extend {}, objectThatIsAList, {
'New Item' :
callback :=>
return "New stuff"
}
这会产生这样的对象(添加注释以显示预期结果)
objectThatIsAList = {
'List Item' :
callback :=>
return "Some value"
'Another item' :
callback :=>
return "Another value"
# this should be last
'The final item' :
callback :=>
no
# this should not be last
'New Item' :
callback :=>
return "New stuff"
}
显然,对象得到了正确扩展,但是属性的顺序与构建列表的目的相关。我更希望'Final Item'
作为扩展对象的第四个而不是第三个属性。
但我的研究并未显示对该$.extend
方法的索引支持。是否有人成功实现了这样的功能和/或有提示如何将对象属性“插入”到某个位置的另一个对象中?
还是有一种聪明的方法可以在$.extend
?
不一定非得是 Coffee,即使是 JS 或 Pseudocode 也会有很大帮助。
编辑:
这是我提出的解决方案,它扩展了遗留代码以获取数组并将它们转换为对象(在整个框架中被广泛使用,并且更改原始代码会破坏很多工作代码):
# this comparison yields a data object that is passed to a method rendering a menu
if o.menu instanceof Array
menuArrayToObj = {}
for menuObject in o.menu
for menuObjectProperty,menuObjectValue of menuObject
menuArrayToObj[menuObjectProperty]=menuObjectValue if menuObjectProperty? and menuObjectValue?
o.menu = menuArrayToObj
else o.menu
有了这个,它可以被提供一个对象或一个数组。后者很容易通过接头插入。