From d3a59e3f695c467c22d02db62532194e17ac827b Mon Sep 17 00:00:00 2001 From: Jarek Radosz Date: Tue, 5 Oct 2021 14:35:32 +0200 Subject: [PATCH] DEV: Use Set instead of array-as-an-object (#14511) I don't know if JS engines were able to optimize-away those gigantic arrays but in any case that's a definite anti-pattern. --- app/assets/javascripts/discourse/app/models/topic-list.js | 7 +++---- .../discourse/app/routes/discovery-categories.js | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/discourse/app/models/topic-list.js b/app/assets/javascripts/discourse/app/models/topic-list.js index da291e8b526..b019da21827 100644 --- a/app/assets/javascripts/discourse/app/models/topic-list.js +++ b/app/assets/javascripts/discourse/app/models/topic-list.js @@ -43,12 +43,11 @@ const TopicList = RestModel.extend({ canLoadMore: notEmpty("more_topics_url"), forEachNew(topics, callback) { - const topicIds = []; - - this.topics.forEach((topic) => (topicIds[topic.id] = true)); + const topicIds = new Set(); + this.topics.forEach((topic) => topicIds.add(topic.id)); topics.forEach((topic) => { - if (!topicIds[topic.id]) { + if (!topicIds.has(topic.id)) { callback(topic); } }); diff --git a/app/assets/javascripts/discourse/app/routes/discovery-categories.js b/app/assets/javascripts/discourse/app/routes/discovery-categories.js index aeb2351552f..344a3be619e 100644 --- a/app/assets/javascripts/discourse/app/routes/discovery-categories.js +++ b/app/assets/javascripts/discourse/app/routes/discovery-categories.js @@ -53,13 +53,12 @@ const DiscoveryCategoriesRoute = DiscourseRoute.extend(OpenComposer, { const url = `${getURL("/")}latest.json?topic_ids=${topic_ids.join(",")}`; return ajax({ url, data: this.params }).then((result) => { - const topicIds = []; - - this.topics.forEach((topic) => (topicIds[topic.id] = true)); + const topicIds = new Set(); + this.topics.forEach((topic) => topicIds.add(topic.id)); let i = 0; TopicList.topicsFrom(store, result).forEach((topic) => { - if (!topicIds[topic.id]) { + if (!topicIds.has(topic.id)) { topic.set("highlight", true); this.topics.insertAt(i, topic); i++;