牛客网js练习的题目记录(二)

flash中的事件处理分哪几个过程? Event对象的target和currentTarget有什么区别?

js中的event对象包含很多有用的信息
target:触发事件的元素。
currentTarget:事件绑定的元素。

用JavaScript脚本为Array对象添加一个去除重复项的方法

Array.prototype.unique=function () {
    if(this.length<=1){
        return this.slice(0);
    }
    var result=[];
    for(var i=0;i<this.length;i++){
        if(!isExist(result,this[i])){
            result.push(this[i]);
        }
    }
    return result;
}
function isExist(result,o) {
    if(result.length==0){
        return false;
    }
    var temp;
    for(var j=0;j<result.length;j++){
        temp=result[j];
        if(temp===o){
            return true;
        }
        //NaN
        if(!o&&!temp&&temp!=undefined&&o!=undefined&&isNaN(temp)&&isNaN(o)){
            return true;
        }
    }
    return false;
}
console.log([false,true,undefined,undefined,null,null,NaN,0,1,{},{},'a','a',NaN].unique());
console.log(null==null);

用javascript写一个图片跑马灯程序,要求图片从右向左无缝移动

轮播图

我们在进行组件开发的时候,精彩会需要用到大量颜色。有两种方法。方法1:预先定义好大量的颜色;方法2:自定义函数,采用随机生成颜色的方式。请采用方法2实现随机颜色汲取。

function renderColour() {
    return "#"+ (Math.random()*oxffffff<<0).toString(16);
}

写出至少5个前端优化的方法,并写明理由。

  • 将CSS放再顶部 — 能加快页面内容显示,并且能避免页面产生白屏。
  • 将JS放在底部 — ①JS会阻塞对其后面内容的呈现;②JS会阻塞对其后面内容的下载。
  • 将JS,CSS放在外部文件中(代码和样式的分离)— 便于优化和管理。
  • 重置CSS文件 — 清除HTML标签默认的属性,让页面按编写者的意愿变化。
  • HTML尽量使用标准规范的写法 — 提高渲染引擎的执行效率。
  • 对JS和CSS进行压缩,去重,合并等处理 — ①减小了文件的体积; ②减小了网络传输量和带宽占用; ③减小了服务器的处理的压力; ④提高了页面的渲染显示的速度 。
  • 减少页面的图片数目 — 浏览器拉取页面图片的开销是比较大的,而实际上,我们的页面为了提升用户体验使用了大量图片,这里我们常采用cdn存放,图片合并(几个图片合成一个,然后使用css进行截取片断显示),永久cache(存在图片变更的维护成本,工具的建设等),甚至有些效果是可以用css来实现的代替图片 。

有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1’, b:’2’, c:”, d:’xxx’, e:undefined}。

function splitUrl(url){
  const transUrl=encodeURI(url);
  const paramList=transUrl.split('?')[1].split('&');
  const newObj={};
  paramList.forEach(elem=>{
    const itemList=elem.split('=');
    newObj[decodeURI(itemList[0])]=decodeURI(itemList[1]);
  });
  return newObj;
}

编写一个JavaScript函数,输入指定类型的选择器(仅需支持id,class,tagName三种简单CSS选择器,无需兼容组合选择器)可以返回匹配的DOM节点,需考虑浏览器兼容性和性能。 /* @param selector {String} 传入的CSS选择器。* @return {Array}*/ var query = function(selector){ //返回查找到的节点数组return [];}

链接:https://www.nowcoder.com/questionTerminal/bdfb4058d2714a3dbc7e283f0a0381c4
来源:牛客网

function selectQuery(ss){
        var arr = [];
        if(/^#/.test(ss)){
            arr.push(document.getElementById(ss));
        }else if(/^\./.test(ss)){
            var values = document.getElementsByClassName(ss);
            if(values.length != 0){
                for(var i=0;i<values.length;i++){
                arr.push(values[i]);
              }
           }
        }else{
            var values = document.getElementsByTagName(ss);
            if(values.length != 0){
                for(var i=0;i<values.length;i++){
                arr.push(values[i]);
              }
           }
        }
        return arr;
    }

网页时钟 第一问:使用HTML,CSS绘制一个时钟,效果图和素材如下图(注意指针可以旋转到任意位置)第二问:用Javascript编写一个Clock类,实现如下接口:

  1. 构造函数Clock(HTMLDomElement dom) :在参数dom中生成上述时钟
  2. setTime(hour,minute,second) :设置时钟时间,指针指定到正确位置
  3. run()时钟开始工作 可以使用jQuery等任何前端框架

javascript里面的继承怎么实现,如何避免原型链上面的对象共享

function Cat(name){
  Animal.call(this);
  this.name = name || 'Tom';
}
(function(){
  // 创建一个没有实例方法的类
  var Super = function(){};
  Super.prototype = Animal.prototype;
  //将实例作为子类的原型
  Cat.prototype = new Super();
})();

请实现javascript中的indexOf功能,判断一个字符串a中是否包含另一个字符串b。

a)如果包含,需要返回匹配字符串b的位置
b)如果不包含,需要返回-1
如:indexOf(“hello”,”el”) return 1。

链接:https://www.nowcoder.com/questionTerminal/3c733bbf54db46a3b673c9e0390d98c4
来源:牛客网

var indexOf = function(string, target) {
    var len = string.length;
    var tLen = target.length;
    if (len < tLen) {
         return -1;
    }
    if (len === tLen) {
        return (string === target) ? 0 : -1;
    }
    for (var i = 0; i < len; i++) {
        if (string.substr(i, tLen) === target) {
            return i;
        }
    }
    return -1;
};

写一个函数padstare(string str1,min_length,string str2)。

例:padstare(‘5’,3,‘0’)返回的是‘005’; padstare(‘798’,5,‘0’)返回的是‘798’;

function padstare(str,min,str_char)
{
    var ret=[];
    if(str.length>=min)
    {
        return str;  
    }
    else
    {
        for(var i=0;i<min-str.length;i++)
          {
               ret.push(str_char);
          }
        return ret.join('')+str;
    }
}

写一个命令行字符的解析函数。

例:-name lily -age 25 -school “chengdu university” 返回的是[-name lily,-age 25, -school “chengdu university”]

function getdata(str)
{
    var json={};
    var gets =str.split('"')[0];
    gets =gets.split(' ');
    for(var i=0;i<gets.length-1;i++)
    {
        if(i%2==0)
        {
            json[gets[i]]=gets[i+1];
        }
    }
    json[gets[gets.length-1]]=str.split('"')[1];
    return json;
}

某饭店要开发一个排队软件。非VIP用户需要排队,先到先得。VIP用户可以插队,但是VIP用户之间需要按到达时间先后排队。

要求实现:①addCustomer(String phoneNumber)函数②有空位时获取排到的用户③用户进店排队时的函数current()

猜你喜欢

转载自blog.csdn.net/mangxi8200/article/details/81259037