笔试题
1 完成foo()函数的内容,要求能够弹出对话框提示当前选中的是第几个单选框。
1 function foo(){ 2 var rg=document.getElementsByName("radioGroup"); 3 for(var i=0,l=rg.length;i<l;i++){ 4 if(rg[i].checked){ 5 alert("你选择了第"+(i+1)+"个单选框" 6 } 7 } 8 return false; 9 }
2、填充注释部分的函数体,完成字符串翻转功能,使得foo()函数调用弹出”成功”的对话框,。
1 function reverse(str){ 2 var spl=str.split(','); 3 var newStr=""; 4 for(var i=spl.length-1;i>=0;i--){ 5 nawStr+=spl[i]+','; 6 } 7 newStr=newStr.subString(0,newStr.length-1); 8 return newStr; 9 }
1 function reverse(str){ 2 // 在此处加入代码,完成字符串翻转功能 3 return str.split(",").reverse().join(","); 4 }
3求y和z 的值是多少?
1 <script type="text/javascript"> 2 var x = 1; 3 var y = 0; 4 var z = 0; 5 function add(n){n=n+1;} 6 y = add(x); 7 function add(n){n=n+3;} 8 z = add(x); 9 </script>
在这里function都没有返回值,所以y,z都返回undefined。改正后function add(n){return n=n+1}和function add(n){return n=n+3;}后x,y的结构都为四,因为是同名的函数,后面的覆盖了前面。
4 如何获取表单<select>(下拉列表)域的选择部分的文本?
1 <form name="a"> 2 <select name="a" size="1" onchange="_sel(this)"> 3 <option value="a">1</option> 4 <option value="b">2</option> 5 <option value="c">3</option> 6 </select> 7 </form> 8 <script> 9 function _sel(obj){
var obj=document.getElementByTagName("slecet");
alert("显示文本:" + obj.options[obj.selectedIndex].text); 11 alert("值:" + obj.options[obj.selectedIndex].value); 12 } 13 </script>
5javascript怎样选中一个checkbox,怎样设置它无效和不能选择?
1 function disableCheck(){ 2 //设置失效 3 document.all.cb1[i].disabled=true; 4 document.getElementsByName("cb1")[i].disabled=true; 5 //设置不能选择 6 document.getElementsByName("cb1")[i].checked=false; 7 8 }
6使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。
1 .box { 2 width:200px; 3 height:200px; 4 border:1px solid red; 5 /*非IE的的垂直居中,display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签。*/ 6 display:table-cell; 7 vertical-align:middle; 8 text-align:center; 9 /* hack for ie */ 10 *display: block; 11 *font-size: 175px; 12 /* end */ 13 } 14 .box img { 15 vertical-align:middle; 16 }
7全选(或者全不选)的所有指定名称的checkbox
1 function selectAll(state,name){ 2 var ids=document.getElementsByName(name) 3 for(var i=0;i<ids.length;i++){ 4 ids[i].checked=state; 5 } 6 }
8全选(或者全不选)的所有的checkbox
1 function selectAlls(state){ 2 var eles=document.getElementsByTagName("input"); 3 for(var i=0,l=eles.length;i<l;i++){ 4 if(eles[i].type=="checkbox"){ 5 eles[i].checked=state; 6 } 7 } 8 }
9全选指定值(可能有多个值)的checkbox
1 function selectCheckbox(name,values){ 2 var eles=document.getElementsByName("name"); 3 var values=values.split(","); 4 for(var j=0;j<values.length;j++){ 5 for(var i=0;i<eles.length;i++){ 6 if(eles[i].value===values[j]){ 7 eles[i].checked=true; 8 } 9 } 10 } 11 }
10 补充按钮事件的函数,确认用户是否退出当前页面,确认之后关闭窗口;
1 function confirmToClose(){ 2 if(confirm("确认关闭?")){ 3 window.close(); 4 } 5 }
11写出简单描述html标签(不带属性的开始标签和结束标签)的正则表达式,并将以下字符串中的html标签去除掉
var str = "<div>这里是div<p>里面的段落</p></div>";
1 function deleteTag(str){ 2 var reg=/<\/?w+\/?/gi; 3 str=str.replace(reg,""); 4 return str 5 }
12将文档中className有“test”的td标签背景色设为黄色
1 var tds=document.getElementsByTagName("td"); 2 for(var i=0;l=tds.length;i<l;i++){ 3 if(tds[i].className.indexOf("test")!=-1){ 4 tds[i].backgroundColor="yellow"; 5 } 6 }
13 用javascript实现控制一个文本框的输入字数限制,超出字数限制文本框飘红显示
1 var oInput=document.getElementsByTagName("input"); 2 oInput.onkeyup=function(){ 3 this.style.border=this.value.length>10?'1px solid #F00':'' 4 }
14使用Javascript打印出1-10000之间的所有素数
1 function sushu(start,end){ 2 if(start>end||start<0){ 3 return error 4 } 5 else if(start<2){ 6 start=2 7 } 8 var flag=false; 9 var result=new Array(); 10 for(var i=start,i<end;i++){ 11 for(var j=2;j<(i/2);j++){ 12 if(i%j==0){ 13 flag=true; 14 } 15 } 16 if(!flag){ 17 result.push(i); 18 }else{ 19 flag=false; 20 } 21 } 22 return result; 23 }
15 我们把一个数字倒着读和原数字相同的数字称之为对称数,(例如1,121,88,8998),不考虑性能,请找出1—10000之间的对称数
1 function findNum(){ 2 var result=""; 3 for(var i=1;i<1000;i++){ 4 var str=i.toString(); 5 var temp=[]; 6 for(var j=str.length-1;j>0;j++){ 7 temp.push(str.charAt(j)); 8 if(temp.join("")===str){ 9 result+=str+"\n"; 10 } 12 } 13 } 14 return result; 15 }
16实现字符串反转
1 //方法一 2 function strReverse(str){ 3 var str=str.split("").reverse(),join(""); 4 return str; 5 } 6 //方法二 7 function strReverse(str){ 8 var l=str.length; 9 for(var i=l-1;i>=0;i--){ 10 var str+=str.charAt(i); 11 } 12 return str 13 }
17 setTimeout调用函数
1 var obj=function(msg){ 2 this.msg=msg; 3 this.shout=function(){ 4 alert(this.msg); 5 } 6 this.waitAndShout=function(){ 7 //每隔五秒调用上面的shout方法 8 var self=this; 9 //由于setTimeout是全局方法,不作调整的话,其this指向window 10 setTimeout(function(){ 11 self.shout(); 12 },1000) 13 } 14 }
17把字符串转化为JSON对象
1 var str="haha=123&hehe=234&key=456"; 2 function show(str){ 3 var json={}; 4 var arr=str.split("&"); 5 for(var i=0;i<arr.length;i++){ 6 var arr2=arr[i].split("="); 7 json[arr2[0]]=arr2[1]; 8 } 9 return json 10 }
18在匿名函数中调用自身,例如实现阶乘
1 var a=(function(num){ 2 if(num===1){ 3 return 1; 4 }else{ 5 return num*arguments.callee(); 6 } 7 }(6));
19截取字符串abcdefg的efg
1 var str="abcdefg"; 2 if(/efg/.test(str)){ 3 var str1=str.slice(str.indexOf("efg")); 4 }
20判断一个字符串中出现次数最多的字符,统计这个次数
1 var obj={}//中介对象key是字符,value是次数 2 for(var i=0;i<str.length;i++){ 3 var key=str.charAt[i]; 4 if(!obj[key]){ 5 obj[key]=1 6 }else{ 7 obj[key]++ 8 } 9 } 10 var max=""; 11 for(var key in obj){ 12 if(obj[key]>max){ 13 max=obj[key]; 14 } 15 } 16 alert("str is :"+key+"max is:"+max);
21去除数组中的重复元素
1 var obj=[];//中介对象key是字符,value是次数 2 var obj={}; 3 for(var i=0;i<arr.length;i++){ 4 var key=arr[i]; 5 if(!obj[key]){ 6 obj[key]=1; 7 obj.push(arr[i]); 8 } 9 }
22简单实现面向对象中的继承
1 function Animal(name){ 2 this.name=name; 3 } 4 Animal.prototype.getName(){ 5 return this.name; 6 } 7 function Dog(){}; 8 dog.prototype=new Animal("xiaoxiong"); 9 dog.prototype.constructor=Dog; 10 var dog=new Dog();
23FF要实现outerHTML还需要特殊处理
1 function getOutHtml(id){ 2 var el=document.getElementById("id"); 3 var oDiv=document.createElement("div"); 4 document.appendChild("oDiv"); 5 var result=el.cloneNode(true); 6 oDiv.appendChild("result"); 7 var last=oDiv.innerHTML; 8 document.removeChild("oDiv"); 9 return last; 10 }
24编写一个方法 求一个字符串的字节长度
1 function getBytes(str){ 2 var len=str.length; 3 for(var i=0;i<str.length;i++){ 4 if(str.charCodeAt(i)>255){ 5 len++; 6 } 7 } 8 return len; 9 }
25如何检测一个变量是一个String类型?
1 function queryStr(str){ 2 return (typeof str=="String"||str.constructor===String) 3 }
26如何获取一个对象的原型
1 var a={}; 2 //ff and chrome.ECMA标准 3 Object.getPrototypeOf(a); 4 //Firefox 3.6, Chrome 5 and Safari 4 5 a._proto_; 6 //all browsers 7 a.constructor.prototype;
27实现输出document对象中所有成员的名称和类型;
1 for(var i in document){ 2 alert(i+"的类型为:"+typeof document[i];) 3 }
28如何获得一个DOM元素的相对浏览器坐标位置?
1 var obj=document.getElementById("d"); 2 function getOffest(obj){ 3 var x=0,y=0; 4 while(obj!=null){ 5 x+=obj.offestLeft; 6 y+=obj.offestTop; 7 obj=obj.offestParent; 8 } 9 var srollTop=(document.documentElemnt.srollTop||document.body.scollTop); 10 var scollLeft=(document.documentElemnt.scrollLeft||document.body.scrollLeft) 11 x-=scrollLeft; 12 y-=scrollTop; 13 }
//getBoundingClientRect()Dom节点调用该方法可返回一个ClientRect类型的对象,该对象有四个属性值:top、left、right、bottom,表示了该节点相对于可视浏览器可视区域的左上角位置的坐标
29如何利用JS生成一个table?
1 var row,cloumn; 2 var oDiv=document.createDocumenFragment(); 3 var oTable=document.createElement("table"); 4 for(var i=0;i<row;i++){ 5 var oTr=document.createElement("tr"); 6 for(var j=0;j<column;j++){ 7 var oTd=document.createElement("td"); 8 oTr.appendChild("oTd"); 9 } 10 oTable.appendChild("oTr"); 11 } 12 oDiv.appendChild("oTable") 13 obj.appendChild("oDiv");
30实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px
1 var loadImg=function(url,callback){ 2 var oImg=new Image(); 3 oImg.src=url; 4 if(oImg.complete){ 5 callback(oImg.width,oImg.height); 6 }else{ 7 oImg.onload=function(){ 8 callback(oImg.width,oImg.height); 9 oImg.onload=null; 10 } 11 } 13 }
31模拟一个HashTable类,包含有add、remove、contains、length方法;
1 var hash=function(){ 2 this.data={}; 3 } 4 hash.prototype.add(key,value){ 5 if(key in this.data){ 6 return "已存在"; 7 }else{ 8 daat[key]=value; 9 } 10 } 11 hash.prototype.remove(key){ 12 if(key in this.data){ 13 delete data[k]; 14 }else{ 15 return "not exist" 16 } 17 } 18 hash.prototype.contains(){ 19 for(var k in this.data){ 20 if(this.data.hasOwnProperty(k)){ 21 document.write(K+":"+this.data[k]+"<\br>") 22 } 23 } 24 } 25 hash.prototype.length(){ 26 var len; 27 for(var k in this.data){ 28 if(this.data.hasOwnProperty(k)){ 29 len++; 30 } 31 }
32下面代码的执行结果:由于js是单线程的,而setTimeout又是异步执行,所以是一个死循环。setTimeout中的函数没有机会执行。
1 <script type="text/javascript"> 2 var t=true; 3 window.setTimeout(function(){ 4 t=false; 5 },1000); 6 while(t){ 7 } 8 alert('end'); 9 </script> </script>
33小贤是一条可爱的小狗(Dog),它的叫声很好听(wow),每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象。小芒和小贤一样,原来也是一条可爱的小狗,可是突然有一天疯了(MadDog),一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。
1 function Dog(){ 2 this.wow=function(){ 3 alert('wow') 4 } 5 this.yelp=function(){ 6 this.wow(); 7 } 8 } 9 function Maddog(){ 10 } 11 Maddog.prototype=new Dog(); 12 Maddog.prototype.yelp=function(){ 13 var self=this; 14 setInterval(function(){ 15 self.wow(); 16 },500); 17 }
34 JS应该包括: 1) 实时计数功能 2)校验字数限制 3) 防止重复提交;
1 oText=document.getElementById("text"); 2 oText.addEventListener("keyup",function(){ 3 var sum=this.value.length; 4 setInterval(function(){ 5 oText2.text=sum; 6 },0) 7 if(sum>1500){ 8 this.value.substring(0,1500); 9 alert("字数多了"); 10 } 11 12 },false) 13 oButton=document.getElementById("button"); 14 oButton.addEventListener("submit",function(){ 15 var flag=false; 16 if(!flag){ 17 flag=true; 18 return true; 19 }else{ 20 alert("不能重复提交"); 21 return false; 22 } 23 },false)
35请注意,代码中有三处alert.他们分别会alert出什么值,时间上的顺序是怎样的?为0,2,3.首先因为js是单线程执行,而setTimeout又是一个异步行为,故首先弹出0.接着执行定时器为1s的setTimeout。此时test函数作用域中的变量a=2覆盖了var a=1。故1s后弹出2,并改变a值为3,那三秒后就会弹出3,并改变a值为4
1 function test() { 2 var a = 1; 3 setTimeout(function() { 4 alert(a); 5 a = 3; 6 }, 1000); 7 a = 2; 8 setTimeout(function() { 9 alert(a); 10 a = 4; 11 }, 3000); 12 } 13 test(); 14 alert(0);
36当我们使用CSS3新属性,比如:box-shadow或者transition时,我们怎么检测浏览器是否支持这些属性?
1 var cssSupport=(function(){ 2 var odiv=document.createElement("div"); 3 var vender="O webkit Moz".split(""); 4 var len=vender.length; 5 return function(prop){ 6 if(porp in odiv.style){ 7 return true 8 } 9 if("-MS-"+prop in odiv.style){ 10 return true; 11 } 12 prop=prop.replace(/^[a-z]/,function(value){ 13 return value.toUpperCase() 14 }) 15 while(len--){ 16 if(vender[len]+prop in odiv.style){ 17 return true; 18 } 19 } 20 21 })
37如果你现在使用的是 Google Chrome 或 Apple Safari,如何让 input 元素在默认情况下显示 “alipay WD Team”,而在光标移入后则显示空白?
1 var oText=document.getElementById("text"); 2 oTex.addEventListener("blur",function(){ 3 this.value="alipay WD Team"; 4 },false) 5 oText.addEventListener("focus",function(){ 6 this.value=""; 7 },false)
38 解释下面两句话
- alert(Function instanceof Object);
- alert(Object instanceof Function);
首先,Function,Object,Array都是构造函数,而所有的函数都是Function对象的一个实例,故2成立
js中函数也是一个对象。function.prototype是一个对象,由原型链机制可知函数也是对象的一个实例。
39当页面上任意一个链接被点击的时候,alert出这个链接在页面上的顺序号,如第一个链接则alert(1), 依次类推;
1 var getLinkIndex(){ 2 var len=document.links.length; 3 for(var i=0;i<len;i++){ 4 document.links[i].onclick=(function(k){ 5 alert(k+1); 6 })(i) 7 } 8 }
40 请写一个 getParents 方法让它可以获取某一个 DOM 元素的所有父亲节点。
1 function getParents(node){ 2 var match=[]; 3 while(ele.nodeType!=9){ 4 node=node.parentNode; 5 match.push(node) 6 } 7 return match; 9 }
41有一个数组,其中保存的都是小写英文字符串,现在要把它按照除了第一个字母外的字符的字典顺序(字典顺序就是按首字母从a-z顺序排列,如果首字母相同则按第二个字母……)排序,请编写代码
1 var selector=function(x,y){ 2 if(typeof x==String&typeof y=String){ 3 var a=x.slice(1,); 4 var b=y.slice(1,); 5 if(a>b){return 1 6 }else if(a<b){return -1;} 7 else{return 0;} 8 } 9 } 10 var arr=[]; 11 arr.sort(selector)
42arguments是数组么?如果不是请写一段代码将其转化为真正的数组,什么情况下需要这么做?
1 Array.prototype.slice().call(arguments,0)
43请为JavaScript每个Array对象添加一个类似于PHP的shuffle()(元素随机排列并改变键名)的方法。
1 Array.prototype.slice().call(arguments,0) 2 function shuffle(){ 3 if(Array.prototype.shuffle!=undefined){ 4 for(var i,j=this.length;i<j;i++,j--){ 5 this[i]=this[j] 6 i=parseInt(Math.random()*i); 7 } 8 } 9 }
44实现全文的英语单词首字母大写
1 function toUpper(str){ 2 var reg=/\b(\w)/g; 3 var str=str.toLowerCase(); 4 return str.replace(reg,function(s){ 5 return s.toUpperCase(); 6 }); 7 }
45实现一个简单的返回顶部组件的功能
1 function getScrollTop(){ 2 return document.documentElement.scrollTop||document.body.scrollTop 3 } 4 function setScrollTop(value){ 5 var scrollTop= document.documentElement.scrollTop=value||document.body.scrollTop=value; 6 7 } 8 function goTop(){ 9 var timer=seterval(function(){ 10 setScrollTop(getScrollTop/1.1); 11 },10) 12 if(getScrollTop()<100){ 13 obj.style.display="none"; 14 clearInterval(timer); 15 }else{ 16 obj.style.display="block"; 17 } 18 } 19 goTop();
46实现两个大数加法
1 function add(a,b){ 2 var a=a.reverse(); 3 var b=b.reverse(); 4 for(var i=0;i<a,length;i++){ 5 a[i]+=b[i]; 6 if(a[i]>9){ 7 a[i]-=10; 8 a[i]++ 9 } 10 } 11 return a[i]; 12 }
47请封装一个名叫Counter的计数器Class,只有两个公有成员:a) 完成计数动作b) 输出计数总数
1 function Counter(){ 2 this.total=0; 3 }; 4 Counter.prototype={ 5 count:function(){ 6 this.total++; 7 } 8 show:function(){ 9 alert(this.total); 10 } 11 } 12 var counter=new counter();
1 <input type="button" value="点我" id='btn'> 2 <script> 3 document.getElementById('btn').addEventListener('touchend', function(){ 4 alert('成功'); 5 }, false); 6
49需要给其中只包含一个img元素的p标签增加一个叫pic的class。
1 var oP=document.getElementsByTagName("p"); 2 for(var i=0;i<oP.length;i++){ 3 if(oP.getElementsByTagName("img").length===1){ 4 oP[i].setAttribute("className","pic"); 5 } 6 }
50使用原生JavaScript给下面列表中的结点绑定点击事件,点击时创建一个Object对象,兼容IE和标准浏览器。
1 var oBody=document.getElementsByTagName("body"); 2 var links=documnet.links; 3 var len=links.length; 4 function createObject(e){ 5 var e=e||window.event 6 var target=e.target||e.srcElement 7 for(var i=0;i<len;i++){ 8 if(e.target===links[i]) 9 var obj={}; 10 obj.index=i+1; 11 obj.name=links[i].text; 12 obj.link=links[i].href; 13 return obj; 14 } 15 } 16 if(window.addEventlistener){ 17 oBody.addEventlistener("click",createObject(),false) 18 }else if(window.attachEvent){ 19 oBody.attachEvent(on+"click",createObject()) 20 }else{ 21 oBody.onclick=createObject(); 22 }
51让文本输入框的宽度随着里面的内容多少自动伸缩自适应
1 var oInput=document.getElementsByTagName("input"); 2 var osize=oInput.getAttribute("size"); 3 if(oInput.value=""||oInput.value.length<osize){ 4 return; 5 } else{ 6 oInput.setAttribute("size",oInput.value.length) 7 }
52如果有两个数组都有25个从小到大的正整数,使用什么算法把两个数组合并到一块并且还保证从小到大排列并去重
1 void f(int a[],int m,int b[],int n,int c[]) 2 { 3 int i = 0,j = 0,k = 0; 4 while(i<m && j<n) 5 { 6 if(a[i]<b[j]){ 7 c[k++] = a[i++]; 8 } else if(a[i]==b[j]){ 9 c[k++]=a[i]; 10 i++ 11 j++; 12 } else { 14 c[k++] = b[j++]; } 15 } 16 //后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 17 if(i<m){ 18 c[k++]=a[i++]; 19 break; 20 } 21 if(j<n){ 22 c[k++]=b[j++]; 23 } 24 }
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
1 void stringZip(char*input,long leng,char*output){ 2 int i,j,k,num=0; 3 char buffer[20]; 4 for(i=0;i<leng;i++){ 5 for(j=i+1;j<leng;j++){ 6 if(input[i]==input[j]){ 7 num++; 8 }else{ 9 break; 10 } 11 } 12 if(0!=num){ 13 memset(buffer,0,sizeof(buffer)); 14 itoa(buffer,num,10); 15 strcpy(output+k,buffer); 16 k+=strlen(buffer); 17 } 18 output[k++]=input[i]; 19 i+=num+1; 20 } 21 }
求两个数组的和差:就是去掉两个数组中相同的元素 然后将两个数组中的元素存放在一个新的数组中 且数组A中元素要在B数组元素之前
1 int hebing(int len1,int a[],int len2,int b[]){ 2 int i,j,c[len1+len2],k; 3 for(int i=0;i<len1;i++){ 4 for(int j=0;j<len2;j++){ 5 if(a[i]==b[j]){ 6 a[i]=0; 7 b[j]=0; 8 } 9 } 10 } 11 while(i<len1){ 12 if(a[i]!=0){ 13 c[k++]=a[i]; 14 i++ 15 } 16 } 17 while(j<len2){ 18 if(b[j]!=0){ 19 c[k++]=b[j]; 20 j++ 21 } 22 } 23 24 for(int i=0;i<len1+len2;i++){ 25 cout<<c[i]<<endl; 26 } 27 }
扫描数组,求出最大的增量长度:
1 int length(int a[],int n){ 2 int max=1,len=1; 3 for(int i=1;i<n-1;i++){ 4 if(a[i]>a[i-1]){ 5 len++; 6 if(len>max){ 7 max=len; 8 } 9 }else{ 10 len=1; 11 } 12 } 13 cout<<max<<endl; 14 }
53兼容性事件模型
1 //标准dom下addEventlistener将this指向对应的dom对象。而在IE中attachEvent中this总是指向window。而我们期望和onclick一样指向对应的dom对象 2 function bind(el,type,fn,userCapture){ 3 if(window.addEventlistener){ 4 el.addEventlistener("type",fn,false) 5 }else if(window.attachEvent){ 6 el.attachEvent(on+"type",function(){ 7 fn.apply(el,arguments) 8 }) 9 } 10 }
54回文算法
1 var i,n,flag; 2 var a=[]; 3 while(n!=0){ 4 a[i]=n%10; 5 n=n/10; 6 i++ 7 } 8 for(var j=0;j<i-1;j++){ 9 if(a[j]!=a[i-j-1]){ 10 flag=false; 11 break; 12 } 13 } 14 if(j>=i-1){ 15 flag=true; 16 return falg; 17 }
1 bool huiwen(char a[]){ 2 int n=strlen(a); 3 int i,j=n-1; 4 while(i<j){ 5 if(a[i]!=a[j]){ 6 return false;} 7 i++; 8 j--; 9 } 10 return true; 11 }
55有一组数字,从1到n(假设n=10000),从中任意删除了3个数,顺序也被打乱,剩余数字放在一个n-3的数组里,
请找出丢失的数字
1 var arr=[]; 2 var news=[];//中介数组 3 var lost=[]; 4 function query(){ 5 for(var i=0;i<arr.length;i++){ 6 news[arr[i]]=1; 7 } 8 for(var j=0;j<n;j++){ 9 if(news[j]!=1){ 10 var k; 11 lost[k++]=j; 12 } 13 } 14 return lost[]; 15 }
56输入一个整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
1 var sum=0; 2 var max=a[0]; 3 for(var i=0;i<a.length;i++){ 4 if(sum>=0){//只要和还是正数就继续加 5 sum=+a[i]; 6 }else{//若和变成了负数。从当前位置重新计算 7 sum=a[i]; 8 } 9 if(sum>max){ 10 max=sum; 11 } 12 }
57给你两个排序的数组,求两个数组的交集
1 var a[]; 2 var b[]; 3 var i=0,j=0,k=0; 4 while(i<a.length&&j<b.length){ 5 if(a[i]<b[j]){//从两个数组的头部开始遍历,对应值小的下标加1.直到相等 6 i++}else if(a[i]>b[j]){ 7 j++; 8 }else{ 9 result[k++]=a[i]; 10 i++; 11 j++; 12 } 13 }
58浏览器类型判断
1 var browser=navigator.userAgent.toLowerCase(); 2 if(/chrome([\d.]+)/i.test(browser)){ 3 alert("类型是:") 4 }
59按下回车键提交
1 document.onkeydown=function(ev){ 2 ev=event||window.event; 3 if(ev.keyCode==13){ 4 tijiao(); 5 } 6 //阻止回车键 7 if(ev.keyCode==13){ 8 ev.keyCode==0 9 } 10 }
60javascript中字符串看做某种进制来解析
1 parseInt("123")//123; 2 parseInt("123",8)//1*64+2*8+3把123看做一个8进制数来解析成10进制 3 parseInt("1f",16)//1*16+15
61javascript10进制转换为2进制
1 var a=n; 2 var str=""; 3 while(a>1){ 4 str=a%2+str; 5 a=parseInt(a/2); 6 } 7 str=a+str;
//a.toString(2)
62如何实现事件委托(给无数li绑定事件)
1 function delegete(){ 2 var oUl=document.getElementsByTagName(ul); 3 oUL.addEventlistener("click",function(ev){ 4 var ev=event||window.event; 5 var a=ev.target||ev.srcElement6 alert(a.innerHTML); 7 } 8 },false) 9 }
64 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。 输入一个数组,求出这个数组中的逆序对的总数。
1 function getReverse(){ 2 var data=[]; 3 var count; 4 for(var i=0,l=data.length;i<l;i++){ 5 for(var j=j+1;j<l;j++){ 6 if(data[i]>data[j]){ 7 count++; 8 } 9 } 10 } 11 return count; 12 }
65在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。
1 function getOnce(){ 2 var arr=[]; 3 var obj=[]; 4 for(var i=0,l=arr.length;i<l;i++){ 5 if(!obj[a[i]){ 6 obj[a[i]]=1; 7 }else{ 8 obj[a[i]]++ 9 } 10 } 11 for(var i=0; i<l;i++){ 12 if(obj[a[i]]=1){ 13 return a[i]; 14 } 15 } 16 }
66输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
1 function getCount1(n){ 2 var count; 3 function numberof(num){ 4 var inner; 5 while(num!=0){ 6 if(num%10==1){ 7 inner++; 8 } 9 num=num/10; 10 return inner 11 } 12 } 13 for(var i=0;i<n;i++){ 14 numberof(i); 15 count+=numberof(i) 16 } 17 return count; 18 }
67 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
1 function getMoreThanHalf(arr){ 2 var arr=[]; 3 var result=arr[0]; 4 var times=1; 5 for(var i=1,l=arr.length;i<l;i++){ 6 if(arr[i]!==result){ 7 times--; 8 if(time==0){ 9 result=arr[i]; 10 times=1; 11 } 12 }else{ 13 times++; 14 } 15 } 16 return result; 17 }
68调整数组顺序使奇数位于偶数前面
1 function evenOdd(arr){ 2 var i=0; 3 var j=arr.length; 4 while(i<l){ 5 while(arr[i]%2==0){ 6 i++; 7 } 8 while(arr[j]%2!==0){ 9 j--; 10 } 11 swap(arr[i],arr[j]); 12 i++; 13 j--; 14 } 15 return arr; 16 }
69二进制中1的个数
1 function count1(a){ 2 var count; 3 while(a){ 4 if(a&1==1){//与整数1(二进制表示前面全为0,最后一位为1)做位运算时自动转化为2进制 5 count++; 6 } 7 a=a>>1; 8 } 9 return count; 10 }
70给定一个含有n个元素的整型数组a,求a中所有元素的和。
1 int sum(int*a,int n){ 2 return n==0?0:sum(a,n-1)+a[n-1]; 3 }
71 给定一个含有n个元素的整型数组a,求a中的最大值和最小值。
1 void maxAndMin(int* a,int l,int r,int& maxValue,int& minValue){ 2 if(l==r){ 3 maxValue=a[l]; 4 minValue=a[l]; 5 return; 6 }else if(l+1==r){ 7 if(a[l]>=a[r]){ 8 maxValue=a[l]; 9 minValue=a[r]; 10 }else(a[l]<a[r]){ 11 minValue=a[l]; 12 maxValue=a[r]; 13 } 14 return 15 } 16 int m=(r+l)/2; 17 int lmax,lmin; 18 maxAndMin(a,l,m,lmax,lmin); 19 int rmax,rmin; 20 maxAndMin(a,m+1,r,rmax,rmin); 21 maxValue=max(lmax,rmax); 22 minValue=min(lmin,rmin); 23 }
72给定一个含有n个元素的整型数组a,求a中的最大值和次最大值。
1 void maxAndSecond(int* a,int l,int r,int &max,int &second){ 2 if(r==l){ 3 max=a[r]; 4 second=a[r]; 5 return 6 }else if(l+1=r){ 7 max=a[l]>=a[r]?a[l]:a[r]; 8 second=a[l]>=a[r]?a[r];a[l]; 9 }else{ 10 int m=(l+r)/2; 11 int lmax,lsecond; 12 maxAndSecond(a,l,m,lmax,lsecond); 13 int rmax,rsecond; 14 maxAndSecond(a,m+1,r,rmax,rsecond); 15 if(lmax>rmax){ 16 max=lmax; 17 second=lscond>rmax?lsecond:rmax; 18 }else{ 19 max=rmax; 20 second=rsecond>lmax?rsecond:lamx; 21 } 22 } 23 }
73给定一个含有n个元素的整型数组a,其中只有一个出现奇数次,找出这个元素。
1 int getOnce(int* a,int n){ 2 int r=a[0]; 3 for(int i=1;i<n;i++){ 4 r= r^a[i]; 5 } 6 reurn r; 7 }
74 给定两个含有n个元素的有序整型数组a和b,各有n个元素,求两个数组中满足给定和的数对,即对a中元素i和b中元素j,满足i + j = d(d已知)
1 void getdefined(int *a,int *b,int n){ 2 while(i>0&j<n){ 3 int i=0,j=n-1,d; 4 if(a[i]+b[j]<d){ 5 i++ 6 }else if(a[i]+b[j]==d){ 7 cout<<a[i]<<","<<b[j]<<endl; 8 i++; 9 j--; 10 }else{ 11 j-- 12 } 13 } 14 }
75给定一个整型数组a,求出最大连续子段和,如果和为负数,则按 0计算,比如1, 2, -5, 6, 8,则输出6 + 8 = 14。
1 int getSubMax(int *a,int n){ 2 int currmax=0; 3 int submax=0; 4 for(int i=0;i<n;i++){ 5 if(currmax+a[i]<0){ 6 currmax=0; 7 }else{ 8 currmax+=a[i]; 9 max(submax,currmax); 10 } 11 } 12 return submax; 13 }
76将一个含有n个元素的数组向右循环移动k位,要求时间复杂度为O(n),且只能使用两个额外的变量
1 void reverse(int *a,int start,int end){ 2 while(start<end){ 3 int temp=a[start]; 4 a[start++]=a[end]; 5 a[end--]=temp; 6 } 7 8 } 9 void reversek(int *a,int n,int k){ 10 reverse(a,0,n-k-1); 11 reverse(a,n-k,n-1); 12 revers(a,0,n-1);
77给定一个含有n个元素的整型数组a,从中任取m个元素,求所有组合
78 给定含有n个元素的整型数组a,其中包括0元素和非0元素,对数组进行排序,要求:
1. 排序后所有0元素在前,所有非0元素在后,且非零元素排序前后相对位置不变
2. 不能使用额外存储空间
1 void sort(int *a,int n){ 2 int k=n-1; 3 for(int i=n-1;i>=0;i--){ 4 if(a[i]!=0){ 5 a[k]=a[i]; 6 a[i]=0; 7 } 8 k--; 9 } 10 }
79给定一个有序整数序列(非递减序),可能包含负数,找出其中绝对值最小的元素,比如给定序列 -5, -3, -1, 2, 8 则返回1。
1 int search(int *a,int n){ 2 int l,r,m; 3 while(l<r){ 4 if(l+1==r){ 5 return abs(l)>abs(r)?a[r]:a[l]; 6 }else if(l==r){ 7 return a[l]; 8 }else{ 9 m=(l+r)/2; 10 if(same(a[m],a[r])){ 11 r=m; 12 continue; 13 } 14 if(same(a[l],a[m])){ 15 l=m; 16 continue; 17 } 18 } 19 } 20 }
80实现一个遍历数组或对象里所有成员的迭代器。
1 //数组 2 each(data1, function(o){ 3 if( 6 == this ) 4 return true; 5 else if( 8 == this ) 6 return false; 7 console.log(o + ": \"" + this + "\""); 8 }); 9 //对象 10 each(data2, function(v, n){ 11 if( 5 == this ) 12 return true; 13 console.log(n + ": \"" + v + "\""); 14 }); 15 var each=function(obj,fn){ 16 var l=obj.length; 17 var temp; 18 if(obj instanceof Array){ 19 for(var i=0;i<obj.length;i++){ 20 var temp=fn.call(obj[i],i+1); 21 } 22 }else if(obj instanceof Object){ 23 for(j in obj){ 24 if(obj.hasOwnProperty(j)){ 25 temp=fn.call(obj[e],obj[e],e); 26 } 27 } 28 } 29 30 } 31 }
81实现一个叫Man的类,包含attr, words, say三个方法。
1 function Man(obj){ 2 if(this instanceof Man){ 3 for(var key in obj){ 4 this[e]=obj[key]; 5 } 6 }else{ 7 return new Man(obj); 8 } 9 } 10 Man.protrotype={ 11 attr:function(att,val){ 12 if(val){ 13 this[att]=val; 14 }else{ 15 if(att instanceof Object){ 16 for(var key in Object){ 17 this.key=att[key] 18 } 19 }else(att instanceof String){ 20 return this.hasOwnProperty(att)?this[att]:"未输入"; 21 } 22 } 23 words:function(word){ 24 var wordsArray=[]; 25 this.wordsArray.push(word) 26 return this.wordsArray; 27 } 28 says:function(){ 29 this["fullname"]+this.["words-emote"]+":"+this.wordsArray.slice(0,this[words-limits].join("")) 30 } 31 }
82解析url地址
1 function urlParse(str){ 2 var reg=/#(page)?(?:\/(.*)\/\?)?(.+)$/ ; 3 var arr=reg.exec(str); 4 var arr1=[],obj={}; 5 arr[1]&&arr1.push(arr[1]); 6 arr[2]&&arr1.push(arr[2]); 7 if(arr[3]){ 8 var arr4=arr[3].split("&"); 9 for(var i=0;i<arr4.length;i++){ 10 arr5=arr4[i].split("="); 11 obj[arr5[0]]=arr5[1]; 12 } 13 arr1.push(obj); 14 } 15 return arr1; 16 }
83以尽可能多的方法完成下面的函数,使之能够正确返回一个任意给定文件名的扩展名
1 function getFileName(filename){ 2 return filename.split(".").pop(); 3 4 var index=filename.lastIndexOf("."); 5 var name=filename.slice(index,); 6 7 var reg=/\.(w+)$/i; 8 var result=reg.exec(filename); 9 return result.pop(); 10 }
84随着滚动条的滑动来获取图片
1 //有文档类型用documentElement为html,无文档类型用body 2 //获取窗口可视高度,除去工具栏 3 var clientHeight=document.documentElement.clientHeight||document.body.clientHeight; 4 //获取页面卷去高度,也就是滚动条高度 5 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; 6 //获取网页的完整(实际)高度 7 var scrollHeight=document.documentElement.scrollHeight||document.body.scrollHeight 8 //如果滚动条高度加上可视高度=页面的实际高度就表示滚到底了 9 if(scrollTop+clientHeight==scrollHeight){ 10 lazyLoad(); 11 } 12 //可以使用ajax从服务器获取图像数据(包含地址),这是回调函数 13 function lazyLoad(data){ 14 var fagrament=document.createDocumentfragement; 15 for(var i;i<data.length;i++){ 16 var img=new Image(); 17 img.src=data[i].src; 18 fagrament.appendChild(img); 19 } 20 document.body.appendChild(fragment); 21 } 22 //将图片的路径存储在img标签的一个非src属性中.来判断图片是否处于浏览器的当前一屏内,如果是,将rel属性内的地址赋值给src属性
85简单的图片放大效果
1 function zoom(id,x,y){ 2 var obj=document.getElementById("id"); 3 //获取容器高度和宽度 4 var h=obj.offestHeight;//写在样式表中的高度style.height获取不到 5 var w=obj.offestWidth; 6 obj.onmouseover=function(){ 7 obj.style.width=w*x+"px"; 8 obj.style.height=h*y+"px"; 9 obj.style.zIndex=1; 10 } 11 obj.onmouseout=function(){ 12 obj.style.width=""; 13 obj.style.height=""; 14 obj.style.zIndex=""; 15 } 16 }
86动态打印时间,格式为yyyy-MM-dd hh:mm:ss
1 function formate(a){ 2 return a.toString.replace(/^(\d)$/,'0$1'); 3 } 4 function printTime(){ 5 var day=new Date(); 6 var s=day.getFullYear()+"-"; 7 s+=formate(day.getMonth()+1)+"-"; 8 s+=formate(day.getDate())+" "; 9 s+=formate(day.getHours())+":"; 10 s+=formate(day.getMinutes())+":"; 11 s+=formate(day.getSeconds()); 12 document.write(s); 13 } 14 setInterval("printTime()",1000);
87补全代码,编写一个简单DOG类,能初始化其名字,颜色,具有如下方法并能使这些方法可链式操作
1 function Dog(name,color){ 2 this.name=name; 3 this.color=color; 4 } 5 Dog.protrotype={ 6 setName:function(name){ 7 this.name=name; 8 return this; 9 }, 10 setColor:function(color){ 11 this.color=color; 12 return this; 13 }, 14 yelp:function(){ 15 alert('wow'); 16 return this; 17 }, 18 crow:function(num){ 19 for(var i=0;i<num;i++){ 20 setTimeout(yelp(),i*1000); 21 } 22 return this; 23 } 24 }
88堆排序
1 //某个节点交换 2 void heapShift(int *a,int i,int size){ 3 int lchild=2*i; 4 int rchild=2*i+1; 5 if(i<size/2){ 6 if(a[lchild]>a[i]){ 7 swap(a[i],a[lchild]); 8 } 9 if(a[rchild]>a[i]){ 10 swap(a[i],a[rchild]); 11 } 12 } 13 } 14 //初始建堆 15 void heapCreate(int *a,int size){ 16 for(int i=size/2;i>1;i--){ 17 heapShift(a,i,size); 18 } 19 } 20 //堆排序 21 void heapSort(int *a,size){ 22 heapCreate(a,size); 23 for(int i=size;i>1;i--){ 24 swap(a[1],a[i]); 25 heapCreate(a,i); 26 } 27 }
89字符串原地逆序
1 void reverse(int *s,int left,int right){ 2 while(left<right){ 3 int temp=a[left]; 4 a[left++]=a[right]; 5 a[right--]=temp; 6 } 7 } 8 9 void reverse(int *s,int left,int right){ 10 if(left>right){ 11 return; 12 } 13 int temp=a[left]; 14 a[left]=a[right]; 15 a[right]=temp; 16 reverse(s,lfet+1,right-1);
90 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置。例如:“yyabcdabjcabceg”,输出结果应该为 abc和 3。
1 function searchMax(str){ 2 var str="adffggfhtyjhj"; 3 for(var i=str.length-1;i>1;i--){ 4 for(var j=0;j<str.length-i-1;j++){ 5 var temp=str.substring(j,j+i); 6 var n=str.indexOf(temp); 7 var m=str.lastIndexOf(temp); 8 if(m!=n){ 9 alert(n); 10 alert(temp); 11 break; 12 } 13 } 14 } 15 }