检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果

Check if a search result exists more than once if yes than display only one result in Javascript

本文关键字:显示 结果 一个 Javascript 则在 存在 是否 搜索结果 如果 检查      更新时间:2023-09-26

大家好。我正在使用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;
  });

这是客户端上的一个例子,但您可以在服务器上做类似的事情,这取决于您是否需要知道是否存在重复。如果没有,最好在服务器上进行,以最大限度地减少数据传输。