Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery$.extend能否与索引一起使用?_Javascript_Jquery_Object_Coffeescript_Extend - Fatal编程技术网

Javascript JQuery$.extend能否与索引一起使用?

Javascript JQuery$.extend能否与索引一起使用?,javascript,jquery,object,coffeescript,extend,Javascript,Jquery,Object,Coffeescript,Extend,我正在尝试扩展以下结构的对象(使用Coffeescript中的JQuery): objectThatIsAList={ “列表项”: 回调:=> 返回“一些值” “另一项”: 回调:=> 返回“另一个值” “最后一项”: 回调:=> 不 } 在基于coffeescript的大型框架中,此对象用作下拉菜单的(动态)模型 我正在扩展它 objectThatIsAList=$。扩展{},objectThatIsAList{ “新项目”: 回调:=> 返回“新东西” } 这会产生这样一个对象(添加

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

objectThatIsAList={
“列表项”:
回调:=>
返回“一些值”
“另一项”:
回调:=>
返回“另一个值”
“最后一项”:
回调:=>
不
}
在基于coffeescript的大型框架中,此对象用作下拉菜单的(动态)模型

我正在扩展它

objectThatIsAList=$。扩展{},objectThatIsAList{
“新项目”:
回调:=>
返回“新东西”
}
这会产生这样一个对象(添加注释以显示预期结果)

objectThatIsAList={
“列表项”:
回调:=>
返回“一些值”
“另一项”:
回调:=>
返回“另一个值”
#这应该是最后一次了
“最后一项”:
回调:=>
不
#这不应该是最后一次
“新项目”:
回调:=>
返回“新东西”
}
显然,对象得到了正确的扩展,但是属性的顺序与构建列表的目的相关我更希望
“Final Item”
作为扩展对象的第四个属性,而不是第三个属性

但是我的研究没有显示对
$.extend
方法的索引支持。是否有人成功地实现了这样的功能和/或有如何在某个位置将对象属性“插入”到另一个对象中的提示

或者是否有一种聪明的方法将最后一项重新定位在
$.extend
之后

不一定是咖啡,即使是JS或伪代码也会有很大的帮助

编辑:

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

#此比较生成一个数据对象,该对象被传递给呈现菜单的方法
如果o.menu instanceof数组
menuArrayToObj={}
对于o菜单中的menuObject
对于menuObjectProperty,指定menuObject的menuObjectValue
MenuarRayToObject[menuObjectProperty]=menuObjectValue是否为menuObjectProperty?还有menuObjectValue?
o、 menu=menuArrayToObj
还有菜单吗
有了它,就可以为它提供对象或数组。后者很容易插入到带有接头的电缆中

根据定义,Javascript对象是无序的

如果您希望维持排序,则需要一个
数组

jQueryUI对话框对象就是一个很好的例子。虽然可以使用
对象
,就像使用
按钮
选项一样,但如果您要求各个按钮按特定顺序排列,则必须提供一个对象数组

使用此模型,对象看起来像:

arrayThatIsAList = [
  { title: 'List Item', callback: ... },
  { title: 'Another Item', callback: ... },
  { title: 'New Item', callback: ... },
  { title: 'The final item', callback: ... }
];
根据定义,Javascript对象是无序的

如果您希望维持排序,则需要一个
数组

jQueryUI对话框对象就是一个很好的例子。虽然可以使用
对象
,就像使用
按钮
选项一样,但如果您要求各个按钮按特定顺序排列,则必须提供一个对象数组

使用此模型,对象看起来像:

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

将具有第一个属性的对象作为调用
$的第一个参数。extend

objectThatIsAList = $.extend { 
  'New Item' : 
    callback :=> 
      return "New stuff" 
}, objectThatIsAList
“不!”您大声喊道,“ECMAScript规范明确地保留了未定义的属性枚举顺序!”

是的,没错。正确的观点但是,所有现代ECMAScript实现都按照定义属性的顺序枚举属性。它成为事实上的标准。请在此处尝试:。我怀疑任何人都找不到按定义顺序以外的顺序列出属性的浏览器

因此,它不能保证符合规范,但就所有实际用途而言,它的工作原理是一致的


但是,请注意,如果开始使用整数作为属性名,则浏览器之间的结果将不一致。

在调用
$时,将属性位于第一位的对象作为第一个参数。extend

objectThatIsAList = $.extend { 
  'New Item' : 
    callback :=> 
      return "New stuff" 
}, objectThatIsAList
“不!”您大声喊道,“ECMAScript规范明确地保留了未定义的属性枚举顺序!”

是的,没错。正确的观点但是,所有现代ECMAScript实现都按照定义属性的顺序枚举属性。它成为事实上的标准。请在此处尝试:。我怀疑任何人都找不到按定义顺序以外的顺序列出属性的浏览器

因此,它不能保证符合规范,但就所有实际用途而言,它的工作原理是一致的

但是,请注意,如果开始使用整数作为属性名,则浏览器之间的结果将不一致。

$。extend()
用于将两个或多个对象合并为一个对象它不管理订单

如果要对数据进行排序,应使用对象数组(它允许您使用其索引操作数据)并使用自定义排序函数来比较对象标题:

yourArray.sort(sortfunction);

function sortfunction(yourObjectA, yourObjectB){
    //Compare yourObjectA and yourObjectB, and return -1, 0, or 1
}
$.extend()
用于将两个或多个对象合并为一个对象它不管理订单

如果要对数据进行排序,应使用对象数组(它允许您使用其索引操作数据)并使用自定义排序函数来比较对象标题:

yourArray.sort(sortfunction);

function sortfunction(yourObjectA, yourObjectB){
    //Compare yourObjectA and yourObjectB, and return -1, 0, or 1
}

您希望如何为对象编制索引?JS对象属性的排序是未经设计定义的。这是我面临的问题,或者说是试图回避的问题。我正在使用的菜单生成方法不具备使用数组来构建其输出的能力(这很糟糕,但目前无法更改),因此我正在尝试找到一种方法