halobear

导航

笔试题

//过滤出字符串中出现过的数字及字母
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"
}

 

posted on 2018-09-06 15:40  沧海①粟  阅读(126)  评论(0编辑  收藏  举报