Javascript Lodash性能与u.uniqWith一起命中,以删除重复对象
我在Lodash中使用Javascript Lodash性能与u.uniqWith一起命中,以删除重复对象,javascript,node.js,big-o,lodash,Javascript,Node.js,Big O,Lodash,我在Lodash中使用\uqwith从约6000个对象的数组中删除重复对象: let uniqColors = _.uniqWith(colorCollection, _.isEqual); 其中阵列中的示例对象如下所示: { r: 122, g: 44, b: 216 } 平均处理大约需要8500毫秒。有没有一种方法可以使用\uqby()或其他Lodash函数来加速这种类型的函数 这里有一个香草JavaScript解决方案,在我的机器上用Chrome处理6000个随机条目需要4
\uqwith
从约6000个对象的数组中删除重复对象:
let uniqColors = _.uniqWith(colorCollection, _.isEqual);
其中阵列中的示例对象如下所示:
{
r: 122,
g: 44,
b: 216
}
平均处理大约需要8500毫秒。有没有一种方法可以使用
\uqby()
或其他Lodash函数来加速这种类型的函数 这里有一个香草JavaScript解决方案,在我的机器上用Chrome处理6000个随机条目需要4毫秒
我将颜色转换为其整数等价物,然后使用a跟踪重复的颜色:
const getRandomData=(n)=>{
常量结果=[];
for(设i=0;i const hash=(color)=>(color.r我不知道Set()
这似乎是一个更健壮/可扩展的解决方案。我还找到了一种在Lodash中实现这一点的方法:
let uniqColors = _.uniqBy(colorCollection, function (e) { return e.r + ' ' + e.g + ' ' + e.b; });
很酷。看看你是否可以通过使用整数而不是字符串来提高速度:.uniqBy(colorCollection,c=>c.r*65536+c.g*256+c.b)
Wow整数可将性能提高约30%。我在哪里可以了解更多有关其工作原理的信息?最终,这一切都归结为字节。RGB颜色可以用3个字节表示,因此最有效的实现每次只需比较3个字节和3个字节。在我的方法中,我使用的数字已经占用了8个字节。您的转换sion to string的结果是每个数字大约10个字符,即20个字节。我使用的Set
是一种方便的数据结构,可以将数据排序到不同的存储桶中,使查找速度更快。非常确定的是,我的解决方案的时间仍然可以很容易地减少一半(如果不是更多的话)。顺便说一句,如果t的顺序是他的结果并不重要。