如何删除数组里面多余的重复项(2)?经典论坛的高手帮忙写了一个jquery扩展,对&&有点小疑问。<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$.extend({     
uniq:function(a) {
var r=[];
for (var i=0,l=a.length; i<l; ++i){
//请问下面的 && 如果前面的 $.inArray(a[i],r)<0 为flase还会执行r.push(a[i])吗?
$.inArray(a[i],r)<0&&r.push(a[i]);
};
return r; 
}   
});var a = [1,2,3,2,2,1,2,3,3,4,5,3,2,1];
alert($.uniq(a));
</script>

解决方案 »

  1.   

    $.inArray(a[i],r)<0&&r.push(a[i]);        
    就是检查r数组里面有没有a[i]这个元素,有则$.inArray>=0。根据&&左侧为false则不继续右侧判断,那么就不执行后面的r.push(a[i]); ,相反,如果没有则$.inArray()<0为true,那么就执行后面的逻辑,这里把这个元素推到r中,实际如下:
    if($.inArray(a[i],r)<0){
    r.push(a[i]);
    }
    这样可以看懂了吧
      

  2.   


    $.extend({     
        var a = [1,2,3,2,2,1,2,3,3,4,5,3,2,1];
        uniq:function(a) {
            var r=[];
            for (var i=0,i<a.length;i++){
               r.push(a[i]);
               for(var j=0;j<r.length-1;j++){
                    if(s[i]==r[j]){
                         r.splice(r.length-1,1);
                     }
               }           
            }
            return r; 
        }   
    });
      

  3.   

    <script language="javascript" type="text/javascript">
    var a = [1,2,3,2,2,1,2,3,3,4,5,3,2,1];
    function uniq(a){
       var b={};
       var  c=[];
       for(var i=0;i<a.length;i++){
        !b[a[i]]&&(b[a[i]]=1)&&c.push([a[i]]);
        }
        return c;
    }
    var a = [1,2,3,2,2,1,2,3,3,4,5,3,2,1];
    alert(uniq(a));
    </script>