1. 程式人生 > >幾個js面試筆試題

幾個js面試筆試題

//陣列去重,需要考慮到{}
	//第一種,借用物件關鍵字的唯一性
	function uniq(arr) {
	    let turnObject = {};//物件關鍵字的唯一性
	    let uniqArr = [];
	    for(let i = 0, l = arr.length; i < l;i++){
	        if(!turnObject[arr[i]] || arr[i] instanceof Object){//判斷是否為空或者是否是{}
	           turnObject[arr[i]] = arr[i];
	           uniqArr.push(arr[i]);
	        }
	    }
	    return uniqArr;
	}
	var arr = [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN];
	var arr1 = [1,1,1,2,2,4,3,3,6,7,5];
	//第二種,利用es5中的indexOf方法、
	function upRemove(arr){
		let uniqArr = [];
		for(let i = 0 ,l = arr.length ; i < l; i++){
			if(uniqArr.indexOf(arr[i]) == -1  || arr[i] instanceof Object){
				uniqArr.push(arr[i]);
			}
		}
		//console.log(uniqArr);
		return uniqArr;
	}
	upRemove(arr);
	//第三種,利用es6的set結構
	let useSetRemove = (arr)=>[...new Set(arr)];
	//console.log(useSetRemove(arr));


	//統計字串中每個字元的出現頻率,考慮空格
	function count(str) {
	    let countObject = {};
	    str = str.split(' ').join();//使用split分割字串,使其沒有空格,在拼接成一個字串
	    for(let i = 0, l = str.length; i < l; i++){
	    	if(str[i] != ','){//去掉字串中的逗號
	    		if(!countObject[str[i]]){
	            	countObject[str[i]] = 1;
		        }else{
		            countObject[str[i]] += 1;
		        }
	    	}    
	    }
	    return countObject;
	}
	count('hello world');

    //獲取含有漢字的字串的長度
	function strLength(str, bUnicode255For1) {
		 var realLength = 0, len = str.length, charCode = -1;
		  for (var i = 0; i < len; i++) {
		    charCode = str.charCodeAt(i);
		    if (charCode >= 0 && charCode <= 255) 
		       realLength += 1;
		    else
		       realLength += 2;
		  }
		 // console.log(realLength);
		  return realLength;
		
	}
	// strLength('hello world, 牛客',false);

  //將字串轉換為駝峰格式
	const sName = " -webkit-border-image-";
	const str = sName.replace(/(?!^)\-(\w)(\w+)/g, (a, b, c) => {
		return b.toUpperCase() + c.toLowerCase();
	}).replace("-", "");
	//console.log(str);

	//作用域的考察
	function doSomething(){

		for(var i = 0; 4 > i; i++) {

		var k = 100;

		aMrg +=',' + (k + i);

		}

	}
	var k = 1,aMrg = k;
	doSomething();
	aMrg +=k;
	//console.log(aMrg);//1,100,101,102,1031
    

    //獲取url ? 後面的引數,並將引數物件化
    function parseQueryString(url){
    	var params = {};
    	var arr = url.split("?");
    	if(arr.length == 0){
    		return params;
    	}
    	arr = arr[1].split("&");
    	for(let i = 0, l = arr.length; i < l; i++){
    		let a = arr[i].split("=");
    		params[a[0]] = a[1];
    	}
    	return params;
    }
    var url = "www.baidu.com?name=123&key=123123&syn=1";
    var ps = parseQueryString(url);
    //console.log(ps);

    //陣列的隨機排序
    //方法一:使用隨機獲取陣列下標,並與前面的數交換位置
  	var arr = [1,'a',3,4,'f',6,'c',8,9,10];
  	function randSort1(arr){
  		for(var i = 0,len = arr.length;i < len; i++ ){
  			var rand = parseInt(Math.random()*len);
  			var temp = arr[rand];
  			arr[rand] = arr[i];
  			arr[i] = temp;
  		}
  		return arr;
  	}
  	//console.log(randSort1(arr));
  	//方法三:使用sort函式
  	var arr = [1,'a',3,4,'f',6,'c',8,9,10];
  	arr.sort(function(){
  		return Math.random() - 0.5;
  	})
  	//console.log(arr);

  	//二分查詢
  	//遞迴
  	function binarySearch(data, dest, start = 0, end = data.length -1){  
	    m = Math.floor((start + end) / 2);  
	    if(data[m] == dest){
	        return m;
	    }
	    if(dest < data[m]){  
	        return binarySearch(data, dest, 0, m-1);  
	    }else{
	        return binarySearch(data, dest, m+1, end);  
	    }  
	    
	    return false;  
		}  
	var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];
	//console.log(binarySearch(arr,4));
	//非遞迴
	function binarySearch1(data, dest){  
	    var h = data.length - 1,  
	        l = 0;  
	    while(l <= h){  
	        var m = Math.floor((h + l) / 2);  
	        if(data[m] == dest){  
	            return m;  
	        }  
	        if(dest > data[m]){  
	            l = m + 1;  
	        }else{  
	            h = m - 1;  
	        }  
		    }  
		    
		    return false;  
		}  
	var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];  
	//console.log(binarySearch1(arr,4));