前端面试题小汇

面试屡屡碰壁,从中遇到几个面试题汇总记录一下,原题是记不住了,记住大概题意。

 

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递归

posted @ 2015-04-29 15:34  uustoboy  阅读(198)  评论(0)    收藏  举报