合并数组,删除重复的元素(内附一种高效算法)

woodfans 2007-10-12 08:31:45
譬如说:
array1={a,b,c,d},array2={a,f,g,h},合并后结果是这样{b,c,d,f,g,h},注意不是{a,b,c,d,f,g,h},重复的元素也去掉
有什么比较好的算法吗,如果结果是{a,b,c,d,f,g,h}的话,下面的算法是目前我见过最快的

<SCRIPT LANGUAGE="JavaScript">
<!--
Array.prototype.unique = function()
{
var a = {}; for(var i=0; i<this.length; i++)
{
if(typeof a[this[i]] == "undefined")
a[this[i]] = 1;
}
this.length = 0;
for(var i in a)
this[this.length] = i;
return this;
}

var a = new Array(1,2,3,4);
var b = new Array(2,3,5,7);
var c = a.concat(b).unique();
alert(c);

//-->
</SCRIPT>
...全文
1322 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuixiping 2008-03-24
  • 打赏
  • 举报
回复
meizz 正解

<script language="javascript">
Array.prototype.unique2 = function()
{
for(var a={}, b={}, i=0, n=this.length; i<n; i++)
{
if(typeof(b[this[i]])!="undefined") continue;
if(typeof(a[this[i]])=="undefined") a[this[i]] = 1;
else{b[this[i]]=1; delete a[this[i]]}
}
this.length=0;
for(i in a) this[this.length] = i; return this;
};

var a = new Array(1,2,3,4);
var b = new Array(2,3,5,7);
var c = a.concat(b).unique2();
alert(c);
</script>



woodfans的代码就不行了,如果重复次数是3次,5次……就过滤不了了,比如
var a = new Array(1,2,3,3);
var b = new Array(2,2,3,4);
jiaxueq 2007-10-21
  • 打赏
  • 举报
回复
写入对象属性(重复的自己会覆盖)

再遍历。
jiaxueq 2007-10-21
  • 打赏
  • 举报
回复
写入对象属性,

再遍历。
btbtd 2007-10-20
  • 打赏
  • 举报
回复
差集。。。应用在标签里的吧。。。
woodfans 2007-10-19
  • 打赏
  • 举报
回复
代码多了个],meizi前辈给看下,最近项目里用到了你写的那棵树,在此表示谢意
woodfans 2007-10-19
  • 打赏
  • 举报
回复
我仔细看了下感觉这样就行

]<script language="javascript">
Array.prototype.unique2 = function()
{
for(var a={}, i=0, n=this.length; i<n; i++)
{
if(typeof(a[this[i]])=="undefined") a[this[i]] = 1;
else{ delete a[this[i]]}
}
this.length=0;
for(i in a) this[this.length] = i; return this;
};

var a = new Array(1,2,3,4);
var b = new Array(2,3,5,7);
var c = a.concat(b).unique2();
alert(c);
</script>


meizz 2007-10-19
  • 打赏
  • 举报
回复
<script language="javascript">
Array.prototype.unique2 = function()
{
for(var a={}, b={}, i=0, n=this.length; i<n; i++)
{
if(typeof(b[this[i]])!="undefined") continue;
if(typeof(a[this[i]])=="undefined") a[this[i]] = 1;
else{b[this[i]]=1; delete a[this[i]]}
}
this.length=0;
for(i in a) this[this.length] = i; return this;
};

var a = new Array(1,2,3,4);
var b = new Array(2,3,5,7);
var c = a.concat(b).unique2();
alert(c);
</script>
woodfans 2007-10-18
  • 打赏
  • 举报
回复
楼上的,那是定义数组。

joejoe1991 2007-10-13
  • 打赏
  • 举报
回复
各位老大 var a={} 这是什么意思啊?
woodfans 2007-10-13
  • 打赏
  • 举报
回复
meizz:我需要的结果是{b,c,d,f,g,h},注意不是{a,b,c,d,f,g,h}。
meizz 2007-10-12
  • 打赏
  • 举报
回复
这个问题已经讨论过了,你的答案也就是上次讨论的结果。
Array.prototype.unique = function()
{
for(var a={}, i=this.length-1; i>-1; i--)
{
if(typeof(a[this[i]])=="undefined") a[this[i]] = 1;
}
this.length=0;
for(i in a) this[this.length] = i; return this;
};

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧