Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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选项卡完成脚本更高效?_Javascript_Ajax_Performance_Chat - Fatal编程技术网

有没有办法让这个JavaScript选项卡完成脚本更高效?

有没有办法让这个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

此代码将集成到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 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数组并将每个匹配的用户添加到其中。如果用户想要查看所有匹配结果,那么您已经拥有了所有匹配结果。如果只想显示第一个或最后一个结果,那么可以通过索引从数组中获取它。有关详细信息,请参阅。