javascript - JQuery $.extend 可以与索引一起使用吗?

标签 javascript jquery object coffeescript extend

我正在尝试扩展以下结构的对象(使用 Coffeescript 中的 JQuery):

objectThatIsAList = {
  'List Item'      : 
    callback       :=>
      return "Some value"
  'Another item'   :
    callback       :=>
      return "Another value"
  'The final item' :
    callback       :=>
      no
}

此对象用作大型基于 CoffeeScript 的框架中下拉菜单的(动态)模型。

我正在扩展它

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或者伪代码也会有很大的帮助。

编辑:

这是我提出的解决方案,它扩展了遗留代码以获取数组并将它们转换为对象(这些对象在整个框架中广泛使用,并且更改原始代码会破坏大量工作代码):

# 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 

有了这个,它就可以被提供一个对象或一个数组。后者可以通过拼接轻松插入。

最佳答案

Javascript 对象根据定义是无序的

如果您希望保持排序,则需要一个Array

jQueryUI 对话框对象就是一个很好的例子。尽管可以按照 buttons 选项的方式使用 Object,但如果您要求各个按钮按特定顺序排列,则必须提供 < em>对象数组。

使用此模型,您的对象将如下所示:

arrayThatIsAList = [
  { title: 'List Item', callback: ... },
  { title: 'Another Item', callback: ... },
  { title: 'New Item', callback: ... },
  { title: 'The final item', callback: ... }
];

关于javascript - JQuery $.extend 可以与索引一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924706/

相关文章:

javascript - 用于 Javascript 的开放 XML SDK

javascript - 无法使用 Testcafe 拦截来自页面的传出 AJAX 请求

JQuery UI 1.8.23 复制粘贴问题

java - 是否可以通过将 "new Object()"转换为泛型类来实例化泛型类?

javascript - 通过变量重新初始化 JavaScript 函数对象

ios - Swift 3 JSON 从 JSONArray 获取字符串不起作用

javascript - jquery - 速度计箭头模仿,向鼠标旋转箭头

javascript - 获取 HTML 元素内的文本,将其存储在变量中并将类添加到 DOM 中的所有其他匹配项

jquery - bootstrap.js 类型错误

javascript - 所选元素具有相同的值但不同的 id