gpt4 book ai didi

javascript - 以下两个代码的超快速和首选方式是什么?

转载 作者:行者123 更新时间:2023-11-30 19:34:59 25 4
gpt4 key购买 nike

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

我有两种方法:

  1. 有两个嵌套循环来将所有在线人员与我的联系人列表中的在线人员进行比较,然后将我的联系人列表中的在线人员添加到对象中我的应用。代码如下:
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. 只有一个循环并将所有在线人员添加到我的应用中的一个对象。代码如下:
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 人在对象中,并且通过用户名从对象访问我们需要的在线人可能需要很长时间。但是在第一个代码中,让人们花很多时间,因为我们有两个循环并比较它们,但在应用程序内访问将很容易,因为我们只有那些在线的人在我的联系人列表中。**

最佳答案

恕我直言,浏览器的原生 includes()(适用于更大的数组)方法应该是最快的:

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

你也可以只存储一个 bool 值

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

并有条件地呈现您需要的内容(翻译的消息、图标等)

关于javascript - 以下两个代码的超快速和首选方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56037869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com