【发布时间】:2019-11-20 17:17:29
【问题描述】:
我有数百万个消息对象
messages: [
{
id: Int,
text: String,
userId: Int,
receiverId: Int,
},
和成千上万的用户
users: [
{
id: Int,
name: String,
},
我需要处理两个对象并以格式返回一个对象
[{ message, userFromName, userToName }]
我读到了数组方法,例如 find、filter,其中一些和所有这些方法都比原生 for 和 foreach 慢。
我还写了两个foreach循环的函数
msgData.forEach(function(msg,i) {
...iterating every msg
userData.forEach(function(user) {
...iterating every user id over message sender and receiver id
});
});
代码复杂度O(n)square
如何在更短的时间内获得所需的格式?
【问题讨论】:
-
如果你让服务器处理这些数据,也许效率会更高。
-
如果您的数据可以转换为以 id 为键的对象,例如
messages = {"id1": {...}, "id2": {...}}和users = {"id1": {...}, "id2": {...}},那么您可以大大提高性能,因为现在由对象键完成查找,而不是迭代通过一个数组。 -
“我需要处理两个对象” - 哪些? “并以格式返回一个对象” - 你的意思是返回一个包含多个对象的数组吗?
-
是什么让你认为
find或some比forEach慢? -
把它们放在几个
Maps中:消息由发送者键入,消息由接收者键入,用户由id键入。这应该可以让您足够高效地进行大多数搜索。
标签: javascript ecmascript-6 time-complexity javascript-objects