js数组操作

来源:互联网 发布:kegg数据库 编辑:程序博客网 时间:2024/05/22 01:36

1. 数组元素去除重复?

方案一: 

var arr=[1,2,3,'4','3',5,2];var result=unique( arr);for(   var i=0;i<result.length;i++){document.write(   result[i] +"<br />");}function unique( arr ){var result=[];for( var i=0;i<arr.length;i++){if( result.indexOf(   arr[i])==-1 ){result.push( arr[i] );}}return result;}
方案二:字符和数字相同也认为相同

var arr=[1,2,3,'4','3',5,2];var result=unique( arr);for(   var i=0;i<result.length;i++){document.write(   result[i] +"<br />");}function unique( arr ){var result=[];var hash={};for( var i=0;i<arr.length;i++){if(  !hash[arr[i]] ){hash[arr[i]]=true;result.push(  arr[i]  );}}return result;}

2. 数组顺序扰乱?

方案一:

var arr=[1,2,3,'4','3',5,2];var result=shuffle( arr);for(   var i=0;i<result.length;i++){document.write(   result[i] +"<br />");}//每次随机抽取一个数并存到新数组中,并删除被抽中的数。function shuffle(  array){var copy=[];n=array.length;var i;while( n){i=Math.floor( Math.random()*array.length );if(  i in array){copy.push( array[i] );delete array[i];n--;}}return copy;}
方案二:

var arr=[1,2,3,'4','3',5,2];var result=shuffle( arr);for(   var i=0;i<result.length;i++){document.write(   result[i] +"<br />");}//与上一个相似,只是通过splice去掉重复的选项.function shuffle(  array){var copy=[];n=array.length;var i;while( n){i=Math.floor( Math.random()*n-- );copy.push( array.splice(i,1)[0] );}return copy;}

方案三:

var arr=[1,2,3,'4','3',5,2];var result=shuffle( arr);for(   var i=0;i<result.length;i++){document.write(   result[i] +"<br />");}//从前面抽取数字跟最后一个交换,即每一次前第n个数与最后一个交换,第二次前n-1个数与第n-1个交换function shuffle(  array){var m=array.length, t, i;while(  m){i=Math.floor( Math.random() * m--);t=array[m];array[m]=array[i];array[i]=t;}return array;}

问题三: 如何判断一个对象是一个数组?

var arr=[1,2,3,'4','3',5,2];alert( Array.isArray(   arr) );alert(   arr instanceof Array );

问题四: 两个数组如何求出交集?

var arr=[1,2,3,'4','3',5,2,'8'];var arr2=[2,3,'4',8];var r=arr.filter(   function( n ){return arr2.indexOf( n)!=-1;});alert( r );

问题五: 两个数组如何求出并集?

var arr=[1,2,3,'4','3',5,2,'8'];var arr2=[2,3,'4',8,20];function arrayunion( array,arr2){var a=array.concat(arr2);for( var i=0;i<a.length;i++){for( var j=i+1;j<a.length;j++){if( a[i]===a[j] ){a.splice (j--, 1);}}}return a;}var r=arrayunion( arr,arr2);alert(  r );

问题六:两个数组如何求出差集?

var arr=[1,2,3,'4','3',5,2,'8'];var arr2=[2,3,'4',8,20];Array.prototype.diff=function( a){return this.filter( function(i){return a.indexOf(i)<0;});}alert( arr.diff( arr2)  );



0 0