面试题解析

1.var length = 10;
function fn() {
console.log(this.length);
}

var obj = {
length: 5,
method: function(fn) {
fn();
arguments0;
}
};

obj.method(fn, 1);
输出结果:10;2
解析:
本题考的是指针:obj.method(fn, 1)

  • 调用了obj的method方法,传入了两个参数,则就会开始执行该方法里面的内容;
  • fn()即执行fn函数,其中的this指的是window对象,则window.length即为前面存入的length值为10。
  • arguments[0]指的是传入的第一个参数,即为fn,后面又加了一个(),表示执行fn函数,但此时的this指的是arguments对象,arguments.length即为2

2.请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
解析:

  • 要删除数组中的重复项首先得按顺序将数组中的每一项与其后面的每一项相比较看是否相等;则会用到两个for循环
  • 删除内容可以用到数组的slice()方法;需要注意的是该方法始终返回的是一个数组,该数组包含的是从原始数组中删除的项,当没有删除任何项时会返回空数组
  • 利用prototype实现继承,可以为数组Array对象添加一个方法或者属性
Array.prototype.del_method=function() {
        var newArray = [];
        for(var i = 0;i < this.length - 1;i++) {
            for(var j = i + 1;j < this.length;j++) {
                if(this[i] == this[j]) {
                    var a =this.slice(j)[0];//因为返回的是数组,所以需要添加索引将内容取出来
                    newArray.push(a);
                }
            }
        }
        return newArray;
    };
    var b = [1,4,4,5,1,3,5,3,7];
    console.log(b.del_method());

在这里插入图片描述

3.请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。
function mySort() {
var tags = new Array();//使用数组作为参数存储容器
请补充你的代码
return tags;//返回已经排序的数组
}

var result = mySort(50,11,16,32,24,99,57,100);//传入参数个数不确定console.info(result);//显示结果。
解析:

  • 因为传入参数是不确定的,则需要用到arguments。arguments是调用对象的一个特殊属性,用来引用Arguments对象,它有length属性,代表传给函数参数的个数
  • 排序则可用到数组的sort()方法
 function mySort() {
        var tags = new Array();
        for(var key in arguments) {
            tags.push(arguments[key]);
        }
        tags.sort(function(num1,num2) {
            return num1 - num2;
        });
        return tags;
    }
    var a = mySort(1,5,9,22,7,6,19,4,3,2,0,6);
    console.log(a);

在这里插入图片描述

5.用Javascript实现乱序函数randomSort(array)函数,输出排序后的函数。如[1,2,3,4,5],输出[3,2,4,5,1]。要求N次以内不重复。
解析:

  • 要求N次以内不重复可以用到Math.random()
 var btn =document.getElementById("btn");
    btn.onclick=function() {
        function randomSort(arr) {
            for(var k = 0;k < arr.length;k++) {
                arr.sort(function(num1,num2) {
                    return Math.random() > 0.5?-1:1;
                })
            }
            return arr;
        }
        var array = [1,2,3,4,5];
        var a = randomSort(array);
        console.log(a);

在这里插入图片描述

6.var arr = [1,[[4,5,6],2,[[[7,8,9]]],3]]; //转成一位数组:[1, 4, 5, 6, 2, 7, 8, 9, 3] 。
解析:

  • 先将数组转换成字符串会用到数组的join()方法
  • 再将其转换成一维数组会用到数组的split()方法
  • 再利用一元操作符将字符串转换为数值
var arr = [1,[[4,5,6],2,[[[7,8,9]]],3]];
    function T_arr(array) {
        var a = array.join(",").split(",");
        var newArray = [];
        for(var k = 0;k < a.length;k++) {
            newArray.push(+a[k]);
        }
        return newArray;
    }
    var b = T_arr(arr);

在这里插入图片描述

7.解析url:var str = 'http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6’获得参数名和值。

  • 因为该url为一个很长的字符串,可以先利用数组的split()方法将其分割成字符串数组再利用索引取相应的内容
var str = 'http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6';
    var a = str.split("?");
    var b = a[1];
    console.log(b);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Sunday97/article/details/82792106