检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
Check if a search result exists more than once if yes than display only one result in Javascript
大家好。我正在使用NodeJS和SocketIO制作一个在线用户脚本。它工作正常,但我的问题是,如果用户从几个浏览器/窗口/设备连接。。。它显示不止一个结果,如:48 48 48 61
,所以我希望48
只显示一次,如果他只退出一个浏览器,而其他浏览器仍然连接,那么保留它们。
这是我的代码:客户端:
socket.on('userslist',function(users){
var text = "";
var i;
for (i = 0; i < users.length; i++) {
text += users[i].user_name + "<br>";
document.getElementById("demo").innerHTML = text;
}
});
服务器端:
socket.on('user name',function(user_name){
users.push({id:socket.id,user_name:user_name});
len=users.length;
len--;
//Sending th user Id and List of users
io.emit('user entrance',users,users[len].id);
io.emit('userslist',users);
});
我找了一下,什么也没找到。
首先,对代码进行简单的优化:
socket.on('userslist',function(users){
var text = "";
var i;
for (i = 0; i < users.length; i++) {
text += users[i].user_name + "<br>";
}
document.getElementById("demo").innerHTML = text; //<-- Only needs to happen once
});
不需要为每个用户设置innerHTML
,只要在所有文本连接完成时设置一次即可。
其次,保留一个单独的遍历用户数组,以跟踪重复的用户:
socket.on('userslist',function(users){
var usersProcessed = [];
var text = "";
for (var i = 0; i < users.length; i++) {
if(usersProcessed.indexOf(users[i].user_name) < 0){
text += users[i].user_name + "<br>";
usersProcessed.push(users[i].user_name);
}
}
document.getElementById("demo").innerHTML = text;
});
这是客户端上的一个例子,但您可以在服务器上做类似的事情,这取决于您是否需要知道是否存在重复。如果没有,最好在服务器上进行,以最大限度地减少数据传输。
相关文章:
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- JavaScript循环无法正确计算/显示结果
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- BMI计算器以Javascript显示结果
- 在表中显示结果
- onchange选择get value并执行查询,然后在同一页面上显示结果
- 搜索XML文件并使用javascript显示结果
- Moment.js不显示结果
- 使用jQuery延迟表单输入,并在延迟后在同一页面上显示结果
- 防止 PHP 在新页面中显示结果
- jquery jqgrid 不显示结果,具体取决于 JSON 对象中的参数
- Angular-如何显示结果,仅在未选中时显示
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- jqueryajax帖子将我发送到操作页面,并且不会显示结果数据
- 添加两个数字,并使用Javascript在文本框中显示结果
- 接受用户输入,与JSON数据匹配,并以javascript显示结果
- 自动完成 JQuery 不显示结果
- 控制台.log或显示结果的函数
- 提交表单,使用脚本处理信息,并在同一页面上显示结果
- AJAX 实时搜索仅当结果以相同的第一个字母开头时才显示结果