JavaScript Array 对象:如何快速查找一个值是否存在,不存在再push()!

momoca 2008-02-25 09:51:34
JavaScript Array 对象:如何快速查找一个值是否存在,不存在再push()!

js:
var keyArray = new Array();
attrib.push('page');
attrib.push('123');
//如果查找到attrib里以经有这两个了就不再添加了.
//主要是我不想重复添加...怎么办?有没有快速且效率高的方法????
attrib.push('page');
attrib.push('123');
...全文
9602 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxly21 2010-06-16
  • 打赏
  • 举报
回复
mmmmmmmmmmmmmmmmmmmm
uteflyaway 2010-03-16
  • 打赏
  • 举报
回复
mark
hywill 2009-11-25
  • 打赏
  • 举报
回复
eee
roviury 2008-10-24
  • 打赏
  • 举报
回复
總結:

var func=function(){alert('高級應用');};

var coll = {};
coll['page']=1;
coll['123']=2;
coll['page']=3; // 亦可以 if(!coll['page']) coll['page']=3; ,不過並無需要.
coll['123']=4;
coll[func]=5;

alert(coll.page); //3
alert(coll[123]); //4, 不能 coll.123
alert(coll[func]); //5, 在js,key可以是function,object,array

//coll[key]=value;

page,123 是 keys
1,2,3,4 是 values


/*
//PS.
var collb=coll;
coll[func](); //5
collb[func]=func;
coll[func](); //func,因此coll完全相同於collb,它們有相同的指針Pointer.
//array和object都可當作js的pointer使用,但是應用方面很少.
*/
hzq3554055 2008-08-19
  • 打赏
  • 举报
回复
mark
擒兽 2008-05-23
  • 打赏
  • 举报
回复
楼主直接用{} 不要用[]
前者会自动覆盖重复,在其它语言有的叫字典,有的叫HashSet。
后者数组不会处理重复。

异常处理,楼主可以用
try{

}catch(e){

}

收工
llddy 2008-02-26
  • 打赏
  • 举报
回复
哈哈 ...究竟 多少分数 才能升级啊?
muxrwc 2008-02-26
  • 打赏
  • 举报
回复
- -
为什么都升星星了,回答还是总被人无视..伤心飘走..
活靶子哥哥 2008-02-26
  • 打赏
  • 举报
回复
如果 indexOf 则...
qiangv 2008-02-26
  • 打赏
  • 举报
回复
TO LZ:
我想没辙。
只能2楼那么搞了。
这种问题,只有用hash表最快。
hash表value直接对应adress。js无法实现吧。
qiangv 2008-02-26
  • 打赏
  • 举报
回复
2楼的是hash表?

只是一般的数组~
gzdiablo 2008-02-26
  • 打赏
  • 举报
回复
2楼是用hash表 速度肯定快
muxrwc 2008-02-26
  • 打赏
  • 举报
回复
那就分着来好了..
把非string boolean undefined number
类型的数据,换成另一个array来存,这样添加对象的时候才会遍历.
不过同样需要考虑个问题,就是资源释放.
即删除本array的时候要删除temparray里的引用.
2008-02-26
  • 打赏
  • 举报
回复
同意3楼
gzdiablo 2008-02-26
  • 打赏
  • 举报
回复
忘记说3楼的方法中
内容必须是 数字和字符串 其他的可能不行
gzdiablo 2008-02-26
  • 打赏
  • 举报
回复
手误 3楼写成2楼了 呵呵

js的对象就是用hash的方式储存的 速度比大数据遍历要快
不过array遍历速度也不慢 如果对效率要求不高的话 遍历array也行
不过上面用indexOf肯定是不行的 而且Array里面存储的不一定是字符串或数字 就算是字符串也不能这样

Array.prototype.indexOf=function(value){for(var i=0,l=this.length;i<l;i++)if(this[i]==value)return i;return -1;}


这个是我用的.
qiangv 2008-02-26
  • 打赏
  • 举报
回复
3楼的也不是hash
只是用对象的特性来记录是否有该值。
估计内在也是循环一遍的。

hash是根据key可以直接计算出其adress。而进而得到value。
aCatInNight 2008-02-26
  • 打赏
  • 举报
回复
不过二分法需要先排序,插入时另外一个数组存放,好像更麻烦了
aCatInNight 2008-02-26
  • 打赏
  • 举报
回复
都是循环最快啦,最多是遍历一次.如果是判断类型是数字,数组又很大的话,是不是可以用二分法
萝卜波 2008-02-26
  • 打赏
  • 举报
回复
2楼的是一般数组

3楼的是hash

星星就是不一样
加载更多回复(8)

87,995

社区成员

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

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