五$编程题

Posted strugglinggirl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五$编程题相关的知识,希望对你有一定的参考价值。

1、写一个通用的事件侦听器函数

 // event(事件)工具集,来源:github.com/markyun
    markyun.Event = 
       
        // 视能力分别使用dom0||dom2||IE方式 来绑定事件
        // 参数: 操作的元素,事件名称 ,事件处理程序
        addEvent : function(element, type, handler) 
            if (element.addEventListener) 
                //事件类型、需要执行的函数、是否捕捉
                element.addEventListener(type, handler, false);
             else if (element.attachEvent) 
                element.attachEvent(‘on‘ + type, function() 
                    handler.call(element);
                );
             else 
                element[‘on‘ + type] = handler;
            
        ,
        // 移除事件
        removeEvent : function(element, type, handler) 
            if (element.removeEventListener) 
                element.removeEventListener(type, handler, false);
             else if (element.datachEvent) 
                element.detachEvent(‘on‘ + type, handler);
             else 
                element[‘on‘ + type] = null;
            
        ,
        // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
        stopPropagation : function(ev) 
            if (ev.stopPropagation) 
                ev.stopPropagation();
             else 
                ev.cancelBubble = true;
            
        ,
        // 取消事件的默认行为
        preventDefault : function(event) 
            if (event.preventDefault) 
                event.preventDefault();
             else 
                event.returnValue = false;
            
        ,
        // 获取事件目标
        getTarget : function(event) 
            return event.target || event.srcElement;
        

2、如何判断一个对象是否为数组

function isArray(arg) 
    if (typeof arg === ‘object‘) 
        return Object.prototype.toString.call(arg) === ‘[object Array]‘;
    
    return false;

3、冒泡排序

  • 每次比较相邻的两个数,如果后一个比前一个小,换位置

var arr = [3, 1, 4, 6, 5, 7, 2];

function bubbleSort(arr) 
for (var i = 0; i < arr.length - 1; i++) 
    for(var j = 0; j < arr.length - 1; j++) 
        if(arr[j + 1] < arr[j]) 
            var temp;
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        
    

return arr;


console.log(bubbleSort(arr));

4、快速排序

  • 采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边

var arr = [3, 1, 4, 6, 5, 7, 2];

function quickSort(arr) 
    if(arr.length == 0) 
        return [];    // 返回空数组
    

    var cIndex = Math.floor(arr.length / 2);
    var c = arr.splice(cIndex, 1);
    var l = [];
    var r = [];

    for (var i = 0; i < arr.length; i++) 
        if(arr[i] < c) 
            l.push(arr[i]);
         else 
            r.push(arr[i]);
        
    

    return quickSort(l).concat(c, quickSort(r));


console.log(quickSort(arr));

5、编写一个方法 求一个字符串的字节长度

  • 假设:一个英文字符占用一个字节,一个中文字符占用两个字节

function GetBytes(str)

        var len = str.length;

        var bytes = len;

        for(var i=0; i<len; i++)

            if (str.charCodeAt(i) > 255) bytes++;

        

        return bytes;

    

alert(GetBytes("你好,as"));

6、bind的用法,以及如何实现bind的函数和需要注意的点

    • bind的作用与callapply相同,区别是callapply是立即调用函数,而bind是返回了一个函数,需要调用的时候再执行。

      一个简单的bind函数实现如下

    • Function.prototype.bind = function(ctx) 
          var fn = this;
          return function() 
              fn.apply(ctx, arguments);
          ;
      ;

 

以上是关于五$编程题的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程题:输入五个整数,再按相反顺序输出的程序? 谢谢

一些有趣的编程题

一个c语言的程序题?

蘑菇街2016研发工程师在线编程题

少儿编程电子学会图形化scratch编程等级考试四级真题答案解析(判断题)2021-3

Java经典编程题50道之四十一