是否有一种聪明的(即优化的)方法来重命名javascript对象中的键?
一种非优化的方式是:
o[ new_key ] = o[ old_key ];
delete o[ old_key ];
Run Code Online (Sandbox Code Playgroud) 我想知道旋转JavaScript数组的最有效方法是什么.
我想出了这个解决方案,其中正向n旋转数组向右旋转,负向左旋转n(-length < n < length):
Array.prototype.rotateRight = function( n ) {
this.unshift( this.splice( n, this.length ) )
}
Run Code Online (Sandbox Code Playgroud)
然后可以这样使用:
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
months.rotate( new Date().getMonth() )
Run Code Online (Sandbox Code Playgroud)
我上面的原始版本有一个缺陷,正如Christoph在下面的评论中指出的那样,正确的版本是(额外的返回允许链接):
Array.prototype.rotateRight = function( n ) {
this.unshift.apply( this, this.splice( n, this.length ) )
return this;
}
Run Code Online (Sandbox Code Playgroud)
是否有更紧凑和/或更快的解决方案,可能在JavaScript框架的上下文中?(以下提出的版本都没有更紧凑或更快)
是否有任何JavaScript框架,内置数组旋转?(还没有人回答)
目标是允许使用脚本而不是CFML标记定义.cfm或.cfc的所有函数.
我想改变这个:
<cffunction name="foo" access="remote">
<cfscript>
....
</cfscript>
</cffunction>
Run Code Online (Sandbox Code Playgroud)
进入这样的事情:
<cfscript>
function remote foo() {
....
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
或其他东西,只要它可以在打开和关闭cfscript标签内完成.
我希望Safari的表单自动填充功能可以在我的网络应用程序中处理表单.我们阻止了所有表单的提交事件,而是通过XHR(Ajax)POST将数据发送到服务器.
问题是,Safari在其自动填充(自动填充)"数据库"中创建新条目的默认值要求表单的提交事件一直触发和冒泡.从我的测试中,这是我总结并用于表单GET和POST方法.
Firefox中不存在此问题; 我们所有的表单都保留了为每个字段"提交"的先前值.这是我们在Safari中想要的行为.
在我们的应用程序中,用户将在多个会话中多次填写相同的表单.在某些情况下,浏览器可以根据用户之前提交的值自动完成(在Safari的情况下自动填充)这些字段.
我想知道是否有其他人遇到过Safari这个问题?更好的是,如果他们有一个解决方案(即使特定于Safari)告诉(或强制)Safari将表单字段值保存到其自动填充数据库中,即使表单的提交事件被阻止了?
我在DOM中尝试过preventDefault()更高版本,让提交事件冒泡到表单的父DOM节点; 行为没有区别.这可能只是Safari中的一个bug ...
javascript ×3
arrays ×1
autocomplete ×1
coldfusion ×1
form-submit ×1
forms ×1
key ×1
object ×1
rename ×1
rotation ×1
safari ×1