好像这是算法问题, 不是javascript的问题,如果要做到最佳的查找性能,应该去学习面向对象js的设计方法,采用自定义数组对象去实现.
解决方案 »
- ul li弹出菜单问题
- IE中可以添加自定义的属性到window对象吗?
- 求正则,找出字符串中的-,-或-,或,-
- 一个简单的正则问题,各位牛人帮下忙!
- 怎么隐藏进度条
- 如何用javascript代码将下面的超级连接变成disabled的状态
- 怎样让跳转菜单在新窗口中打开?
- ●●●●●●各位高手帮帮忙:关于ScrollIntoView的问题●●●●●●
- 各位:介绍一本javascript的好书吧。
- 用open创建的窗体可以用opener表示父窗体,而用submit后的页面可以表示前一个页面吗?
- js怎样为动态生成的select标签添加onchange事件?
- 动态控制dropdown list里选项的问题,大家帮帮我
{
for(var i=0;i<arr.length;i++)
{
if(arr[i]==value)
return true;
}
return false;
}
var attrib = new Array();
if(!IsContain(attrib,'page'))
attrib.push('page');
if(!IsContain(attrib,'123'))
attrib.push('123');
if(!IsContain(attrib,'page'))
attrib.push('page');
if(!IsContain(attrib,'123'))
attrib.push('123');
alert(attrib.join())
<script type="text/javascript">
var keyArray = [], keyObject = {};
var addKey = function (key) {
if (!keyObject[key]) {
keyObject[key] = 1;
keyArray[keyArray.length] = key;
}
};
addKey('page');
addKey('123');
addKey('page');
addKey('123');
alert(keyArray.length);
</script>
function addKey(arr, key)
{
var arrs = arr.join();// 把数组arr用","进行连接
if(srrs.indexOf(key) == -1) // 在字符串arrs中查找key第一次出现的位置, 如果不存在则返回值为-1
arr.push(key);
return arr;
}
</script>
push要考虑key Object么?
并且,我写的addKey只是表达下思路而已.如果你想添加多个可以自己按照那个思路扩展方法.
我想没辙。
只能2楼那么搞了。
这种问题,只有用hash表最快。
hash表value直接对应adress。js无法实现吧。
只是用对象的特性来记录是否有该值。
估计内在也是循环一遍的。hash是根据key可以直接计算出其adress。而进而得到value。
不过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;}这个是我用的.
把非string boolean undefined number
类型的数据,换成另一个array来存,这样添加对象的时候才会遍历.
不过同样需要考虑个问题,就是资源释放.
即删除本array的时候要删除temparray里的引用.
前者会自动覆盖重复,在其它语言有的叫字典,有的叫HashSet。
后者数组不会处理重复。异常处理,楼主可以用
try{}catch(e){}收工
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使用,但是應用方面很少.
*/