前端面试题小汇
面试屡屡碰壁,从中遇到几个面试题汇总记录一下,原题是记不住了,记住大概题意。
1、数组[1,9]末尾+1,逢10进1,结果[2,0];
var a = [1,9,9,9,9]; var len = len = a.length; for( var i=len-1;i>=0;i-- ){ if( a[i]+1>=10 ){ a[ i ] = 0; if( i==0 ) { a.unshift( 1 ); }else{ a[ i-1 ] = a[ i-1 ] + 1; } }else{
a[i]=a[i]+1; break ; } } console.log( a );
当时笔试想到的是两个for去循环,面试官说一个循环就可以,回来试试 其实就是从数组最后一位循环+1作判断如果大于10给自身设置为0,数组的前一个+1,如果数组循环到第一位的时候在给数组的最前面添加一个1,循环中有一次+1不大于是10,就自身+1退出循环;
2、数组a=[10,5,9,86,51],b=[40,5,9,86,75,95,10,52]两个数组合并成一个去重的新数组
var a = [10,5,9,86,51]; var b = [40,5,9,86,75,95,10,52]; var c = []; var d = []; var json = {}; c = a.concat(b); for( var i=0,len=c.length;i<len;i++ ){ if( json[ c[i] ] != 1 ){ json[ c[i] ] = 1; d.push( c[i] ); } } console.log(d);
这其实都是普通的数组去重,我用的方法也是网上最普遍的 用json key值当作判断条件去循环 看是否重复过
3、把所有的dom结构循环一遍
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <script> window.onload = function(){ var oDiv = document.getElementsByTagName('div')[0]; ForDom( oDiv ); function ForDom( obj ){ var child = obj.children; console.log(obj.tagName); if( child.length <=0 ){ return ; }else{ for( var i=0,len=child.length;i<len;i++ ) { ForDom( child[i] ); } } } } </script> <body> <div> <p> <span><a href="#"></a></span> <span><a href="#"></a></span> </p> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </div> </body> </html>
笔试面试当时只是感觉用递归判断子元素下面是否还有子元素。ForDom传进来的obj判断是否有子集的length没有return,如果有循环子集DOM 在调用ForDom递归

浙公网安备 33010602011771号