幾個js面試筆試題
阿新 • • 發佈:2018-12-27
//陣列去重,需要考慮到{} //第一種,借用物件關鍵字的唯一性 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));