求高手赐一个 javascript 数组查找的算法

应该网 2006-04-27 09:17:38
求高手赐一个 javascript 数组查找的算法

表单中有一个数组article_coding[],里面有N个值,假设有下面三个值,B001,B002,B003有什么算法可以最快,高效地检查每个值是否有重复。还望高手指点一二。
最好可以写出简短的代码提供参考,谢谢了。

<form name="ucp_depotin" id="ucp_depotin" method="post">
<table id="article_list">
<tr>
<td><input type="text" name="article_coding[]" value="B001" readonly></td>
</tr>
<tr>
<td><input type="text" name="article_coding[]" value="B002" readonly></td>
</tr>
<tr>
<td><input type="text" name="article_coding[]" value="B001" readonly></td>
</tr>
</table>
</form>
...全文
650 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
应该网 2006-04-27
  • 打赏
  • 举报
回复
xuzuning(唠叨)

真是高,呵呵,学到了不少。
xuzuning 2006-04-27
  • 打赏
  • 举报
回复
很简单!
<script>
a = [];
o = document.ucp_depotin['article_coding[]'];
for(i=0; i<o.length; i++) {
v = o[i].value;
if(! a[v]) a[v] = 0;
a[v]++;
if(a[v] > 1)
alert('有重复'+v+':'+a[v]);
}
</script>

注意,无论把数组连接成串时的效率有多高。但是对象数组是不能简单的join的,遍历总是少不了的
变换一下思维,就可以把复杂的问题简单化
应该网 2006-04-27
  • 打赏
  • 举报
回复
谢谢了。
hbhbhbhbhb1021 2006-04-27
  • 打赏
  • 举报
回复
算了,按你的需求写的代码发不上去,我的思路就是先组装成一个数组,用上面的代码去掉重复的元素,判断原数组的长度和新数组的长度是不是相等,如果不等就有重复的,可以参见
http://blog.csdn.net/hbhbhbhbhb1021/archive/2005/10/28/518390.aspx

应该网 2006-04-27
  • 打赏
  • 举报
回复
有谁可以解释一下,clare2003(忘情火) 的这个函数吗?

虽然在五年前学了 javascript 但没有深入。一直相当于初学者水平。

function method_regexp()
{
var begin = new Date().getTime();
var b = new Array();
var s = a.join("\x0f");
var r = new RegExp().compile("0\\.9999\\d+", "g");
b = s.match(r); s = "";
return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
}
</SCRIPT>
hbhbhbhbhb1021 2006-04-27
  • 打赏
  • 举报
回复
上面的代码是meizz去数组中的重复记录的方法,详细代码我写好了,但是发不上来,我在看哪部分有问题
clare2003 2006-04-27
  • 打赏
  • 举报
回复
大容量数组的循环方面效率不尽人意,解决的方案就是:先把数组join()成一个大字符串,然后用正则表达式对这个大字符串进行匹配检索。
<input id="count" value="50000" size="7" maxlength="6">
<input type="button" value="数组初始华" onclick="txt.innerHTML = array_init()" ID=Button1><br>
<input type="button" value="传统循环" onclick="txt.innerHTML += method_for()" ID=Button2>
<input type="button" value="正则匹配" onclick="txt.innerHTML += method_regexp()" ID=Button3>
<div id="txt"></div>

<SCRIPT LANGUAGE="JavaScript">
var txt = document.getElementById("txt");
var a = new Array();



function array_init()
{
var n = parseInt(document.getElementById("count").value);
a.length = 0;
for(var i=0; i<n; i++)
{
a[i] = Math.random() +"";
}
return "数组长度:"+ n;
}

function method_for()
{
var n = a.length;
var begin = new Date().getTime();
var b = new Array();
for(var i=0; i<n; i++)
{
if(a[i].indexOf("0.9999")==0)
{
b[b.length] = a[i];
}
}
return ("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
}

function method_regexp()
{
var begin = new Date().getTime();
var b = new Array();
var s = a.join("\x0f");
var r = new RegExp().compile("0\\.9999\\d+", "g");
b = s.match(r); s = "";
return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
}
</SCRIPT>
hbhbhbhbhb1021 2006-04-27
  • 打赏
  • 举报
回复
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;
}

87,992

社区成员

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

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