js面试

发布时间:2019-07-15 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了js面试脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

数组去重

  1 function distinct(arr) {
        return arr.filter(function (elem,index,arr){
            return arr.indexOf(elem,index+1) === -1;
        });
    }
    console.log(distinct(arr));
    

  2 function unique(arr){
            var obj={};
            var reset=[];
            for(var i=0;i<arr.length;i++){
                if(!obj[arr[i]]){
                    obj[arr[i]]=1;
                    reset.push(arr[i]);
                }
            }

            return reset;
            
        }
        var arr=['1','2','3','1','4','5'];

        console.log(unique(arr));
    //字符串去重
    function strUnique(str){
        var arr=str.split('');
        var newarr=unique(arr);
        var newstr=newarr.join('');
        return newstr;
    }
    var str='adsdsdwesdsdds';
    console.log(strUnique(str));

求字符串出现的次数最多的字符次数

    1   var str='asdsdkdsksdlsldlsassss';
        var temp={};
        str.replace(/w{1}/g,function(val){
            temp[val]?temp[val]++:temp[val]=1;
        })
        String.PRototype.split.call(temp,',')
        console.log(temp);
    
    
    2   var obj={};
        var max;
        var letter;
        for (var i=0;i<str.length;i++ )
        {
            if(obj[str[i]]){
                obj[str[i]]++;
                if(obj[str[i]]>;max){
                    max=obj[str[i]];
                    letter=str[i];
                }
            }
            else{
                obj[str[i]]=1;
                max=obj[str[i]];
                letter=str[i];
            }
        }

        console.log(letter+":"+obj[letter]);
        console.log(obj);
        
     3  var str1=str.split('');
        str1.sort();
        str=str1.join('');
        var reg=/(w)1*/g;

        var arr=str.match(reg);
        console.log(arr);
        arr.sort(function(a,b){
            return a.length<b.length
        })
        console.log(arr[0][0]+':'+arr[0].length)
        

解析URL将参数放在对象中

    function parseUrl(url){
            var obj={};
            var val=url.split('?')[1];
            
            if(val!=null){
                var arr=val.split('&');
                for(var i=0;i<arr.length;i++){
                    var keyArr=arr[i].split('=');
                    obj[keyArr[0]]=keyArr[1];
                }
            }
            return obj;
        }
    
        var url='https://www.baidu.com?key=1&name=cx&age=12';
        console.log(parseUrl(url));
        

随机产生10个在1-100之间的数 并排序

var arr1=Array(10).join(",").split(",")
        .map(function(elem,index,arr){
        return Math.ceil(Math.random()*100+1);
    });
arr1.sort(function(a,b){
        return a<b;
    })

js实现二分法

 function binarySearch(items,value){
            var startindex=0;
            var stopIndex=items.length-1;
            var middle=Math.floor((startindex+stopIndex)/2);
            while(items[middle]!=value&&startindex<stopIndex){
                if(value<items[middle]){
                    stopIndex=middle-1;
                }
                else if(value>items[middle]){
                    startindex=middle+1;
                }
                middle=Math.floor((startindex+stopIndex)/2);
            }
            return (items[middle]!=value)?-1:middle;
}

js快速排序

function quickSort(arr){
    if(arr.length<=0){
      return arr;
    }
    var index=Math.floor(arr.length / 2);
    var cur=arr.splice(index,1);
    var left=[];
    var right=[];
    for(var i=0;i<arr.length;i++){
      if(cur>arr[i]){
        left.push(arr[i]);
      }else if(cur<arr[i]){
        right.push(arr[i]);
      }
    }
    return quick(left).concat(cur,quick(right));
  }

AngularJs

Angular 应用:用带 Angular 扩展语法的 HTML 写 模板 , 用 组件 类管理这些模板,用 服务 添加应用逻辑, 并在 模块 中打包发布组件与服务
钩子


ngOnChanges    
 Angular (重新)设置数据绑定输入属性时响应。 该方法接受当前和上一属性值的 SimpleChanges 对象,
当被绑定的输入属性的值发生变化时调用,首次调用一定会发生在 ngOnInit 之前。

ngOnInit    
 Angular 第一次显示数据绑定和设置指令 / 组件的输入属性之后,初始化指令 / 组件。
在第一轮 ngOnChanges 完成之后调用,只调用 一次 。

ngDoCheck    
检测,并在发生 Angular 无法或不愿意自己检测的变化时作出反应。
在每个 Angular 变更检测周期中调用, ngOnChanges 和 ngOnInit 之后。

ngAfterContentInit    
当把内容投影进组件之后调用。 
第一次 NgDoCheck 之后调用,只调用一次。
只适用于组件 

ngAfterContentChecked    
每次完成被投影组件内容的变更检测之后调用。
ngAfterContentInit 和每次 NgDoCheck 之后调用
只适合组件 

ngAfterViewInit    
初始化完组件视图及其子视图之后调用.
第一次 ngAfterContentChecked 之后调用,只调用一次。
只适合组件 

ngAfterViewChecked    
每次做完组件视图和子视图的变更检测之后调用。
ngAfterViewInit 和每次 ngAfterContentChecked 之后调用。
只适合组件 

ngOnDestroy    
 Angular 每次销毁指令 / 组件之前调用并清扫。 在这儿反订阅可观察对象和分离事件处理器,以内存泄漏.
 Angular 销毁指令 / 组件之前调用。

Angular 2 : Template Driven Forms

import { Component } from '@angular/core';
import { Router , ROUTER_DIRECTIVES} from '@angular/router';
import { NgForm }    from '@angular/forms';

@Component({
    selector: 'login',
    template: `
<h2>Login</h2>
<form #f="ngForm" (ngSubmit)="login(f.value,f.valid)" novalidate>
    <div>
        <label>Username</label>
        <input type="text" [(ngModel)]="username" placeholder="enter username" required>
    </div>
    <div>
        <label>Password</label>
        <input type="password" name="password" [(ngModel)]="password" placeholder="enter password" required>
    </div>
    <input class="BTn-Primary" type="submit" value="Login">
</form>`
   //For long form we can use **templateUrl** instead of template
})

export class LoginComponent{

    constructor(private router : Router){ }

    login (formValue: any, valid: boolean){
        console.log(formValue);
        
        if(valid){
            console.log(valid);
        }
    }    
}     

One way binding from parent component to nested component: [propertyName]
One way binding from nested component to parent component: (propertyName)
Two-way binding (a.k.a banana box notation) : [(propertyName

)]

脚本宝典总结

以上是脚本宝典为你收集整理的js面试全部内容,希望文章能够帮你解决js面试所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。