好像这是算法问题, 不是javascript的问题,如果要做到最佳的查找性能,应该去学习面向对象js的设计方法,采用自定义数组对象去实现.

解决方案 »

  1.   

    一般方法,看有没有牛人来提速function IsContain(arr,value)
    {
      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())
      

  2.   


    <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>
      

  3.   

    <script>
        function addKey(arr, key)
        {
            var arrs = arr.join();// 把数组arr用","进行连接
            if(srrs.indexOf(key) == -1) // 在字符串arrs中查找key第一次出现的位置, 如果不存在则返回值为-1
                arr.push(key);
                
            return arr;
        }
    </script>
      

  4.   

    上面的都不一定行噢。addKey(arr,null),addKey(arr,undefined)怎么搞噢。
      

  5.   

    如果push的是个object 又怎么搞噢。
      

  6.   

    - -
    push要考虑key Object么?
    并且,我写的addKey只是表达下思路而已.如果你想添加多个可以自己按照那个思路扩展方法.
      

  7.   

    2楼是用hash表 速度肯定快
      

  8.   

    2楼的是hash表?只是一般的数组~
      

  9.   

    TO LZ:
    我想没辙。
    只能2楼那么搞了。
    这种问题,只有用hash表最快。
    hash表value直接对应adress。js无法实现吧。
      

  10.   

    2楼的是一般数组3楼的是hash星星就是不一样
      

  11.   

    3楼的也不是hash
    只是用对象的特性来记录是否有该值。
    估计内在也是循环一遍的。hash是根据key可以直接计算出其adress。而进而得到value。
      

  12.   

    手误 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;}这个是我用的.
      

  13.   

    那就分着来好了..
    把非string boolean undefined number
    类型的数据,换成另一个array来存,这样添加对象的时候才会遍历.
    不过同样需要考虑个问题,就是资源释放.
    即删除本array的时候要删除temparray里的引用.
      

  14.   

    楼主直接用{} 不要用[]
    前者会自动覆盖重复,在其它语言有的叫字典,有的叫HashSet。
    后者数组不会处理重复。异常处理,楼主可以用
    try{}catch(e){}收工
      

  15.   

    總結: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使用,但是應用方面很少.
    */