当前位置:首页 > 日记 > 正文

Javascript数组权重删除的六种方法

Javascript数组权重删除的六种方法
必须准备面试的前端的一个问题:如何消除Javascript的数组的重复项目。据我所知,百度、腾讯、盛大、等都在采访这个话题。这个问题看似简单,但实际上隐患。考试不仅是要实现这一功能,但也看到你深入理解计算机程序的执行。

我已经提出了三种算法来实现这个目标:
array.prototype.unique1 =功能()
{
新的临时数组
对于(var i = 0;i < this.length; / /我+ +)当前数组的遍历
{
如果当前数组已保存到临时数组中,则跳过,
否则将推送到临时数组中。
If (n.indexOf (this{i}) = -1 n.push (this{i}));
}
返回N;
}
array.prototype.unique2 =功能()
{
用于临时数组的var、{ = }、r = {、}、n、n、r
对于(var i = 0;i < this.length; / /我+ +)当前数组的遍历
{
如果({这个{ } }!)如果哈希表中没有当前项
{
在哈希表中,这个{ } = true;
R.push(本{我}); / /投入临时阵列电流推力电流阵列
}
}
返回R;
}
array.prototype.unique3 =功能()
{
{此{ 0 } };数组结果
对于(var i = 1;i < this.length; / /我+ +)从第二导线
{
如果我第一次出现在数组中当前位置的当前数组不是i,
因此,重复i,忽略,否则,保存结果数组。
如果(this.indexof(这{我})=我n.push(这{我}));
}
返回N;
}
这些第一和第三是用数组中的索引的方法。这种方法的目的是在阵列的输入参数的第一次出现的位置。很显然,JS引擎遍历数组直到目标被发现时,它的实现。所以这个功能会浪费很多时间和方法2用在哈希表中。放在下标的形式已经存在为对象的下标引用数组的索引比搜索要快得多。

为了确定这三种方法的效率,我做了一个测试程序生成10000个随机数的数组的长度,然后用几种方法测试的执行时间。结果表明,二方法比其他两种方法快得多。但应该超过内存占用二方法,因为有一个哈希表,这是所谓的空间时间。这是测试页面,你可以去看看。

根据HPL丹尼尔的想法,我写的第四种方式:
array.prototype.unique4 =功能()
{
This.sort();
var {此{ 0 } };
对于(var i = 1;i < this.length;i++)
{
如果({ { })!=重新{重新length-1 })。
{
Re.push(本{我});
}
}
重新回归;
}
该方法的基本思想是对数组的排序第一和比较相邻的两值。JS机排序方法排序时,JS引擎应使用快速排序,最后的测试结果,该方法的平均运行时间约为三倍,第二方法,但它比第一和第三快多了。

第五方法

最近的搜索历史,{ }的函数也使用,和IndexOf方法已被使用,这是支持的和不支持IE8 ecma5—。

我们可以自己编写函数(数组对象在原型对象上定义的方法),如下所示:

array.prototype.unique =函数(){
VaR的长度= this.length;
如果(长度< = 1){
返回此;
}
如果(!阵列。原型。指标){
array.prototype.indexof =功能(项目){
var = this.length,i = 0,r = 1;
如果(l = 0){
返回- 1;
}
为(;;i;<;i +;+){
如果(这个{ = } =项){
r = i;
}
}
返回R;
}
}

数组的var
对于(var i = 0;i <长度;i + +){
如果(result.indexof(这{我})= 1){
Result.push(本{我});
}
}
返回结果;
}
第六方法

数组类型不能提供重复的方法,如果您想清除数组的重复元素,您必须考虑它。
功能独特(ARR){
var result = { },重复;
对于(var i = 0,len = arr.length;我< len;i++){
重复= false;
对于(var j = 0,len = result.length;J < len;j++){
如果(ARR {我} = =结果{ J }){
重复=真;
打破;
}
}
如果(!重复){
result.push(ARR {我});
}
}
返回结果;
}

总的思路是将数组中的元素到另一个数组,并检查元件是否是反复的过程,如果有一个直接的损失。你可以看到从嵌套循环,这种方法是非常低效的,我们可以使用一个哈希表的结构来记录存在的元素,因此,内循环是可以避免的。

相关文章

警报之间差异()和()在Javascriptconsole.log

警报之间差异()和()在Javascriptconsole.log

警报,差异,电脑软件,Javascriptconsole,log,{ 1 }警报() { 1.1 }具有阻塞效应,而不是单击以确定,后续代码不能继续执行。 { 1.2 }警报()只能输出字符串,如果报警输出的对象,自动调用toString()方法 如警报({1,2,3}); / / '1,2,3 { 1.3 }警报不支持…

PS图象处理软件冷的知识宇宙的伟大

PS图象处理软件冷的知识宇宙的伟大

知识,图象,处理软件,宇宙,电脑软件,本文介绍了如何利用ps滚轮实现缩放、平移、移动和调整数值的功能。 当滚轮用于PS时,滚筒实际上没有使用,但是一个有三个功能键的滚筒可以完全是真实的。 现在使用了缩放、平移、纵向移位和调整值等功能。 …

小姐快乐个性签名快乐个性签名

小姐快乐个性签名快乐个性签名

个性签名,快乐,小姐,电脑软件,思念一个人,幸福总是在心里溢出,错过一个幸福的个性签名当你值得的时候。 云分离,雾,雨,人们醒来,心明白 幸福就是在没有钱的情况下在旧牛仔裤上找到褶皱的圆圈。 亲爱的,我们去了酒吧,所以我们染了头发,谈到一对夫妇。…

关于CorelDRAW输出画面的色彩失真

关于CorelDRAW输出画面的色彩失真

失真,输出,画面,色彩,电脑软件,关于CorelDRAW输出画面的色彩失真CorelDRAW是画矢量图很好,但你会发现,当你输入PS或AI制作图片,颜色会更加不同。这是因为CorelDraw的色彩模式是ckmy原因。接下来,我们需要共享解决方案。 CorelDRAW是画矢量图很…

如何在屏幕切换下设置显示效果

如何在屏幕切换下设置显示效果

屏幕切换,设置,显示效果,如何在,电脑软件,PS如何显示效果在屏幕开关设置,以下萧边为你详细介绍,一个朋友就开始帮,好吧,让我们一起学习。 我们通常用PS修图,通常用来放大或缩小窗口,移动图像,使图像处理更为直观,这个经验是PS友好交流和零基础的切…

ps为添加阴影

ps为添加阴影

电脑软件,ps,本教程是向朋友介绍PS给图片添加阴影的。这个教程相当不错。这是很基本的。非常适合初学者学习。希望能对你有所帮助。 有时我们需要在图片上添加一个阴影,以使图片看起来更真实和更正直,所以你怎么做呢今天,告诉大家,如何使用ps来…

对恐怖分子的影响PS图象处理软件综

对恐怖分子的影响PS图象处理软件综

森林人,恐怖分子,图象,处理软件,场景,本教程介绍的朋友对PS图象处理软件的人造森林效应。非常有效。建议过来一下。让我们一起学习。 本教程主要是PS图象处理软件合成的恐怖气氛森林人像场景的使用,相对合成过程并不复杂,但涉及到许多使用调…

PHP三元操作员知识总结

PHP三元操作员知识总结

知识,操作员,电脑软件,PHP,今天,当我在网上修改报纸时,我遇到了一个无法理解的声明。 if_summary美元=美元{ 'if_summary } = =行'是':'不'; 后来,百度被发现是PHP的三元运营商。 这个句子的意思等于 如果($行{ 'if_summary} = = 2){ if_s…

excel如何提高十进制输入效率excel

excel如何提高十进制输入效率excel

十进制,输入,效率,电脑软件,excel,在工作中,小型和中型的辫子经常输入大量的数据表,保留三位十进制数,和数据的范围是0.001到100。因为大多数数据集在0.001到0.010之间,所以输入数据需要5个按键和慢速输入。你能增加输入速度吗经过研究,萧边发现…

ai绘制了一套小而新鲜的软件图标教

ai绘制了一套小而新鲜的软件图标教

绘制,教程,图标,小而,新鲜,本教程是将AI引入一组小而令人耳目一新的软件图标方法。教程制作的图标非常漂亮,难度也不是很大。非常实用。建议像你这样的朋友和教程一起学习。 ai学习者,你好,这个关于小清新图标的AI教程是我刚刚学习的教程。这…

AI灵活调节颜色技巧的详细解释

AI灵活调节颜色技巧的详细解释

解释,调节,灵活,颜色,技巧,本教程是给你一个AI的灵活色彩调节技术的详细说明。这个教程很实用。非常适合初学者学习。建议像你这样的朋友一起学习这个教程。 本教程为ai介绍的朋友,随着色彩技术的灵活调整,这种技巧应该相当实用,我觉得这个技…

PS以后创造清凉的魔法效果。

PS以后创造清凉的魔法效果。

创造,清凉,效果,魔法,电脑软件,本教程是介绍PS朋友使用后创建的酷幻魔术图片,教程的效果很酷,作者也想详细介绍,推荐给朋友,喜欢的可以跟着教程一起学习。 本教程主要是介绍魔术魔术图片PS的后期制作方法,很好的教程,调出来效果确实不错,推荐大家…