有没有办法让这个JavaScript选项卡完成脚本更高效?
此代码将集成到AJAX聊天系统中,以启用用户名的选项卡自动完成:有没有办法让这个JavaScript选项卡完成脚本更高效?,javascript,ajax,performance,chat,Javascript,Ajax,Performance,Chat,此代码将集成到AJAX聊天系统中,以启用用户名的选项卡自动完成: var usernames = new Array(); usernames[0] = "Saladin"; usernames[1] = "Jyllaby"; usernames[2] = "CadaverKindler"; usernames[3] = "qbsuperstar03"; var text = "Text and something else q"; // Start of the script to be
var usernames = new Array();
usernames[0] = "Saladin";
usernames[1] = "Jyllaby";
usernames[2] = "CadaverKindler";
usernames[3] = "qbsuperstar03";
var text = "Text and something else q";
// Start of the script to be imported
var searchTerm = text.slice(text.lastIndexOf(" ") + 1);
var i;
for(i = 0; i < usernames.length && usernames[i].substr(0,searchTerm.length) != searchTerm; i++);
// End of the script to be imported
document.write(usernames[i]);
var usernames=new Array();
用户名[0]=“萨拉丁”;
用户名[1]=“Jyllaby”;
用户名[2]=“CadaverKindler”;
用户名[3]=“qbsuperstar03”;
var text=“text和其他内容q”;
//要导入的脚本的开始部分
var searchTerm=text.slice(text.lastIndexOf(“”+1);
var i;
对于(i=0;i
需要注意的是:用户名数组和文本变量都将通过AJAX从聊天室本身加载(不幸的是,我不知道),最终的输出也将由AJAX处理
有没有更有效的方法
另外,关于如何处理正在查找的searchTerm的多个实例的任何提示?您可以通过保持数组排序并使用二进制搜索来查找匹配项,从而大大提高效率(提供大量用户)。您现在的编码方式:
for(i = 0; i < usernames.length && usernames[i].substr(0,searchTerm.length) != searchTerm; i++);
for(i=0;i
您正在检查用户名的长度和searchTerm的长度,并在每次循环时从用户名[i]获取substr
对于在循环过程中不希望更改的任何一项,应在循环开始之前将其存储在变量中
从变量中获取值要比检查对象属性或方法快得多
比如:
for(i = 0,ii=usernames.length,j=searchTerm.length; i < ii && usernames[i].substr(0,j) != searchTerm; i++);
for(i=0,ii=usernames.length,j=searchTerm.length;i
微优化:不是获取子字符串并对其进行比较(创建大量临时字符串)
…您应该使用indexOf,它不会创建临时字符串
usernames[i].substr(0,searchTerm.length) != searchTerm
usernames[i].indexOf(searchTerm) == 0
“搜索词的多个实例被找到”是什么意思?你能举一个你正在思考的问题的例子吗?如果搜索词是,例如,“var”,并且有两个用户名以“var”开头——Varsity和variation,比如。。。在聊天环境中,您可能想要第二个结果,但目前它只选择找到的第一个结果。使用JavaScript数组并将每个匹配的用户添加到其中。如果用户想要查看所有匹配结果,那么您已经拥有了所有匹配结果。如果只想显示第一个或最后一个结果,那么可以通过索引从数组中获取它。有关详细信息,请参阅。