数组练习
1.编写尽可能简洁的javascript代码,找到在第一个数组array1中出现,而在第二个数组array2中没有出现的数字。
var ary1=[1,2,3,4],ary2=[1,2,5,7] function findSpecial(ary1,ary2){ // ary2为什么转换,indexOf在数组中IE6/7有兼容性问题,字符串没有这个问题 var str=ary2.join(""); var n=[]; for(var i=0;i<ary1.length;i++){ var cur=ary1[i]; if (str.indexOf(cur)==-1){ n.push(cur) } } return n; } console.log(findSpecial(ary1,ary2))
2.编写函数,用于过滤一个数组内重复的元素,并用这些元素重构一个新的数组,新数组内也不能有重复元素。
var arrNum = [1,4,1,1,3,3,4,6,7,8,3,7,0,11,22,22]; // 数组去重复 function noRepetition(ary){ var result=[]; var obj={}; for(var i=0;i<ary.length;i++){ var cur=ary[i]; if (!obj[cur]){ obj[cur]=cur; result.push(cur) } } return result } console.log(noRepetition(arrNum))
3.现有一个数组(元素为数字,并且有可能重复),请给Array.prototype增加一个方法(方法名自取),该方法能去掉数组中全部最大和最小的数字。
Array.prototype.deleteTwoN=function(){ var ary=this.sort(function(a,b){return a-b}); ary.shift(); ary.pop(); return ary };
4.如何准确判断一个javascript对象是数组?
if(Object.prototype.toString.call(a) == '[object Array]'){ //是数组对象 }
5.请写出一个函数,功能是删除数组的指定下标元素。
Array.prototype.del=function(index){ if (!isNaN(index)&&index<this.length){ this.splice(index,1) } } ary.del(3);
6.请写一个函数removeVoid(arr),删除该数组中值为“null,undefined”的项,返回原数组。
function removeVoid(ary){ var temp=ary; for(var i= 0;i<temp.length;i++){ console.log(temp[i]) if (!temp[i]){ temp.splice(i,1); i--; } } return temp; }
7.用js实现随机选取10~100之间的10个数字,存入一个数组,并排序。
//一、编写随机数函数 function rn(n,m){ // 1.强制转换参数为数字 var n=Number(n); var m=Number(m); // 2.判断有一个不是有效数字就随机返回[0,1) if (isNaN(n)||isNaN(m)){ alert("我不是有效数字") return Math.random(); } // 3.n,m顺序有变,调整 if (n<m){ var temp=n; n=m; m=temp; } return Math.round(Math.random()*(n-m)+m) }
//二、编写排序,此处使用冒泡排序 function bubbleSort(ary){ var temp=null; // 发个誓,false假设没有调换位置 var flag=false; for (var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.length-i;j++){ if (ary[j]>ary[j+1]){ temp=ary[j]; ary[j]=ary[j+1]; ary[j+1]=temp; // 调换位置改flag flag=true; } } // 外层循环判断flag,调换了,还原flag,没调换出去 if (flag){ flag=false }else{ break } } return ary }
//三、获取10个10-100随机数,并排序 function getTen(){ var ary=[]; for(var i=0;i<10;i++){ ary.push(rn(10,100)) } return bubbleSort(ary) } console.log(getTen())
8.把两个数组合并,并删除第二个元素。
var array1 = ['a','b','c']; var array2 = ['d','e','f']; var array3=array1.concat(array2); array2.length=0;
9.根据每个元素的i属性,由小到大排序如下数组。
//一、冒泡排序 var ary=[{i:5,v:1},{i:2,v:4},{i:3,v:2},{i:1,v:5},{i:4,v:3}]; var temp=null; var flag=false for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.length-i-1;j++){ // 当前项[i]与后一项[i]作比较 if (ary[j]["i"]>ary[j+1]["i"]){ temp=ary[j]; ary[j]=ary[j+1]; ary[j+1]=temp; flag=true } } if (flag){ flag=true }else{ break } }
//二、sort法
ary.sort(function(a,b){ return a.i- b.i }) console.log(ary)