Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lodash性能与u.uniqWith一起命中,以删除重复对象_Javascript_Node.js_Big O_Lodash - Fatal编程技术网

Javascript Lodash性能与u.uniqWith一起命中,以删除重复对象

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

我在Lodash中使用
\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;iconst 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的顺序是他的结果并不重要。