笔试题
//过滤出字符串中出现过的数字及字母 function test (str) { var arr = str.split(''); var numArr = [], alpArr = []; arr.forEach(function (item) { if ((/[0-9]/.test(item)) && (numArr.indexOf(item) === -1)) { numArr.push(item); } else if (/[a-zA-Z]/.test(item)) { alpArr.push(item); } }); return numArr.concat(alpArr).join(''); } var result = test('携程C2t0r1i8p2020校招'); console.log(result); // 2018Ctrip //对象判断对象重组 function groupList (list) { /* 对 list 参数做类型判断 */ if (!(list instanceof Array) || list.length === 0) { return []; } var map = {}, res = []; /* 遍历 list 数组的每一项,过滤掉不符合规范的数据项,同时将有效数据存入 map 对象 */ list.forEach(function (item) { if ((typeof item === 'object') && (item !== null)) { var type = item.type; if (type && (type in map)) { map[type].content.push(item.content); } else { map[type] = { type: type, content: [item.content] }; } } }); /* 将 map 对象的数据 push 到结果数组中 */ for (let key of Object.keys(map)) { res.push(map[key]); } return res; } var list = [null, 2, "test", undefined, { "type": "product", "content": "product1" }, { "type": "product", "content": "product2" }, { "type": "tag", "content": "tag1" }, { "type": "product", "content": "product3" }, { "type": "tag", "content": "tag2" }]; var result = groupList(list); console.log(JSON.stringify(result));//[{"type":"product","content":["product1","product2","product3"]},{"type":"tag","content":["tag1","tag2"]}]
旋转数
//旋转数组找出最小值 function minNumInRotateArray(arr) { var left = 0, len = arr.length, right = len - 1; if (len == 0) return 0; while (left < right) { var mid = left + Math.floor((right-left)/2); if (arr[mid] > arr[right]) { left = mid + 1; } else if (arr[mid] == arr[right]) { right = right - 1; } else right = mid; } return arr[left]; } var array = [3,4,5,1,2]; console.log(array); minNumInRotateArray(array); console.log(minNumInRotateArray(array)); //截取字符串前段与剩余字符串相连 function LeftRotateString(str, n) { // write code here if(str.length == 0) return 0; var len = str.length; var r = n%len; return str.slice(r) + str.slice(0,r); } console.log(LeftRotateString("deweeggsaaq", 6)); //翻转字符串 function ReverseSentence(str) { // write code here return str.split("").reverse().join(""); } console.log(ReverseSentence("deweeggsaaq"));
排序
var arr = [10,9,8,7,7,6,5,11,3]; //冒泡排序 function BubbleSort(array){ var len = array.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } console.log(array); console.log("-----------------------------"); } return arr; } var result = BubbleSort(arr); console.log(result); var arr1 = [4,2,5,76,2,1,8,22] //选择排序 function selectionSort(arr) { var len = arr.length; var minIndex,temp; for(var i=0;i<len-1;i++){ minIndex = i; for(var j=i+1; j<len;j++){ if(arr[minIndex] > arr[j]){ minIndex = j; } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr; } console.log(selectionSort(arr1));
数组
//删除重复数组 // 请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。 //test1 Array.prototype.dictinct = function(){ //rem删除重复的元素数组,delRem重复的元素数组 var rem = [],delRem = []; for(var i = 0;i<this.length;i++){ if(rem.indexOf(this[i]) < 0){ rem.push(this[i]); } else { delRem.push(this[i]); } } console.log(rem); console.log("-----------------------"); console.log(delRem); return delRem; } document.write([1,1,1,1,2,3,4,1,1,2,7].dictinct()); //test2排序 function mySort() { var tags = new Array();//使用数组作为参数存储容器 //请补充你的代码 // for(var i=0; i<arguments.length;i++){ // tags.push(arguments[i]) // } tags = Array.prototype.slice.call(arguments); tags.sort(function(a,b){ return a-b; }) return tags;//返回已经排序的数组 } var result = mySort(50,11,16,32,24,99,57,100);//传入参数个数不确定 console.info(result);//显示结果
//test3 // 用javascript实现用户登录验证的代码。
<body> <form id="formLogin"> <input type="text" name="username"/> <input type="password" name="pwd"/> <button name="login" onclick="valitate()" style="width:100px;height:30px">login</button> </form> <script> function valitate(){ var $form = document.getElementById("formLogin"); if($form.username.value == ""){ alert("请输入用户名"); } if($form.username.value && $form.username.value.length <6){ alert("用户名不能小于6"); } if($form.pwd.value == ""){ alert("请输入密码"); } if($form.pwd.value && $form.pwd.value.length <6){ alert("密码不能小于6"); } } </script> </body>
/*
递归问题 3个瓶子换1瓶水+1个空瓶子,两个瓶子换1瓶水+0个空瓶子,1个瓶子换0瓶水。 f(1) = 0 f(2) = 1 f(3) = 1 f(4) = f(2)+1 //4个瓶子,其中3个可以换1瓶水+1个空瓶,所以是f(2)+1 f(5) = f(3)+1 //3个瓶子换1瓶水+1个空瓶,所以是f(3)+1 ... f(n) = f(n-2)+1 */ function af(n){ if(n<=1) return 0; if(n==1) return 0; if(n==2) return 1; else{ return af(n-2) + 1; } } console.log(af(10)); //生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的 //数对应着不同的学生的学号。然后再把这些数从小到大排序 function sortNum(n){ if(n<=0 || n>1000) return 0; else { var rem = [1,1,2,2,2,6,6,8]; for(var i=0;i<n;i++) { rem.push(Math.floor(1000*Math.random())); } var sortRem,resetRem = []; //数组去重:字符串转成数组操作,按顺序存入另一个新数组,如果新数组中不存在,则存入 for(var i=0;i<rem.length;i++){ if(resetRem.indexOf(rem[i])<0){ resetRem.push(rem[i]); } } //从小到大排序 sortRem = resetRem.sort(function(a,b){ return a-b; }); } return sortRem; } console.log(sortNum(5)); //1写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) function sd(data) { var arr = data,rem=[]; arr.forEach(function(item){ return rem.push(parseInt(item,16)); }) } console.log(sd([0x11,0xee]));
// 4输出描述: // 每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。 // // 输入例子1: // abcqweracb // // 输出例子1: // abcqwer // 思路:字符串转成数组操作,按顺序存入另一个新数组,如果新数组中不存在,则存入 function resetArr(str){ var arr = str.split(''),rem = []; for(var i=0;i<arr.length;i++){ if(rem.indexOf(arr[i]) < 0){ rem.push(arr[i]); } } return rem; } console.info(resetArr("assddddffr"));
编写一个函数实现对Object,Array,Boolean,Number,String这五种主要数据类型进行值复制。
网上搜到的参考解答:Object,Array,Boolean,Number,String分为三种情况:普通变量,Array,Object ,使用递归调用方式解题-->
function clone(Obj){ var buf; if(Obj instanceof Array){ buf = []; //创建一个空数组 var i = Obj.length; while(i--){ buf[i] = clone(Obj[i]); } return buf; } else if (Obj instanceof Object) { buf = {}; //创建一个空对象 for(var k in Obj){ buf[k] = clone(Obj[k]); } return buf; } else { return Obj; //普通对象直接赋值 } } var data = clone([1,2,3,4,5,'fff']); document.getElementById("arra").innerHTML = data; console.log(data); var data1 = clone({'id':1,'name':'lily'}); document.getElementById("obj").innerHTML = data1.id + data1.name; console.log(data1); var data2 = clone(111); document.getElementById("num").innerHTML = data2; console.log(data2);
a、击文字选中checkbox
b、实现一个img图片在指定容器中水平垂直居中
c、解析指定 url 地址,返回其中的 query 参数对象,可以不考虑执行环境的兼容性。 如:http://www.wacai.com/login?a=1&b=2&a=3&c=&c=55&e
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>wacai</title> </head> <body> <h6>如何实现点击文字选中checkbox</h6> <p onclick="cClick()">点击文字选中checkbox</p> <input type="checkbox" id="checked"/> <h6>如何实现一个img图片在指定容器中水平垂直居中</h6> <div style="width:280px;height:180px;border:1px solid #000;position:relative;"><img src="../Lighthouse.jpg" style="width:180px;height:80px;position:absolute;top:50%;left:50%;transform:translate(-90px,-40px)"/></div> <script> // 如何实现点击文字选中checkbox function cClick(){ var setChecked = document.getElementById("checked"); setChecked.checked = !setChecked.checked; } // 如何实现一个img图片在指定容器中水平垂直居中 //解析指定 url 地址,返回其中的 query 参数对象,可以不考虑执行环境的兼容性。 如: http://www.wacai.com/login?a=1&b=2&a=3&c function urlParse(url) { var rem = url.split("?")[1].split("&"),queryObj = {}; for(var i=0;i<rem.length;i++){ var keyVal = rem[i].split("="); //对象:键值存在,容易少判断 // 键存在 if(!queryObj[keyVal[0]] && queryObj[keyVal[0]] != ""){ if(keyVal.length == 1 && rem[i].indexOf("=")>0){ queryObj[keyVal[0]] = ""; } else if(keyVal.length == 1 && rem[i].indexOf("=") == -1){ queryObj[keyVal[0]] = undefined; } else{ queryObj[keyVal[0]] = keyVal[1]; } } else{ queryObj[keyVal[0]] = [queryObj[keyVal[0]]]; queryObj[keyVal[0]].push(keyVal[1]); } } return queryObj; } console.log(urlParse("http://www.wacai.com/login?a=1&b=2&a=3&c=&c=55&e")); </script> </body> </html>
toolTips
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> tooltip</title> <style type="text/css"> #box{ margin-left: 300px; width: 500px; height:500px; background-color:lightblue; } #tooltip{ z-index: 1000; position: relative; top:0; left:0; display:none; width: 200px; height: 35px; line-height: 35px; background-color:#eee; } </style> </head> <body> <div id="box"> <p>鼠标快过来呀</p> <div id="tooltip">~\(≧▽≦)/~啦啦啦</div> </div> </body> <script src="tooltip.js"></script> </html>
var box = document.getElementById('box') var tooltip = document.getElementById('tooltip') box.onmousemove = function(e){ e = e ? e : window.event var x = e.clientX - box.offsetLeft var y = e.clientY - box.clientTop tooltip.style.display = "block" tooltip.style.left = x + "px" tooltip.style.top = y + "px" } box.onmouseout = function () { tooltip.style.display = "none" }