对于两个代码bellow的超级快速和更喜欢的方法是什么



我的代码从服务器获取所有在线人员但是我只需要在我的联系人列表中拥有的那些在线人员。

我有两种方法:

  1. 有两个nested loop与我在Conact列表中拥有的那些在线人员一起使用所有在线人员,然后只需在我的 app 中将我的联系人列表的在线人员添加到Object。代码如下:
people = {};
myContacts = [...];
this.socket.on('online', users => {
    for (let i = users.length - 1; i >= 0; i--) {
         for (let j = myContacts.length - 1; j >= 0; j--) {
             if (myContacts[j].userid === users[i]) {
                this.people[myContacts[j].userid] = 'online';
             }
        }
    }
   this.setState({refresh: !this.state.refresh});
});
  1. 只有一个循环,然后将所有在线人员添加到我的 app 中的对象中。代码如下:
people = {};
myContacts = [...];
this.socket.on('online', users => {
    for (let i = users.length - 1; i >= 0; i--) {
         this.people[users[i]] = 'online';
    }
   this.setState({refresh: !this.state.refresh});
});

现在我的问题是:在使用 app 时,您更喜欢上述我更喜欢上述数字的最佳方法。

**注意:为什么我都担心这两个都很好,您认为同时在线有10000人。

在这里,你告诉我第二个更好,因为有一个循环,但是,如果我们在网上有10000人在线,我们将在对象中有10000人,并且通过用户名从对象访问我们需要的人可能需要很长时间,我会感到困惑。但是在第一个代码中,让人们需要花费很多时间,因为我们有两个循环并进行比较,但是在应用程序中访问会很容易,因为我们只是在我的联系人列表中这些人在我的联系人列表中。**

IMHO浏览器的本机includes()(应用于较大数组(方法应该是最快的方法:

for (let j = myContacts.length - 1; j >= 0; j--) {
  this.people[myContacts[j].userid] = users.includes( myContacts[j].userid ) ? 'online' : 'offline';
}

您也只能存储一个布尔值

for (let j = myContacts.length - 1; j >= 0; j--) {
  this.people[myContacts[j].userid] = users.includes( myContacts[j].userid );
}

和有条件地渲染您需要的东西(翻译消息,图标等(

如果您真的只想显示在您的联系人列表中的在线人员,我认为您可以将myContacts数组变成键/值对象{...}。钥匙是用户ID,值为布尔值(true:在线,false:offline(。这将有助于加快性能

相关内容

最新更新