欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

面试题(1)

程序员文章站 2022-06-04 18:24:35
...

面试题(1)

1.分析下列代码,写出输出结果
var length = 10;
function fn() {
  console.log(this.length);
}

var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

obj.method(fn, 1); 
输出结果:

面试题(1)

2.请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。(阿里)
  1. 分析
    • 利用prototype实现继承,为Array对象添加方法
    • splice()方法始终返回一个数组,该数组中包含从原始数组中删除的项(如果没有 删除任何项,则返回一个空数组)
    • splice()方法会影响原数组
  2. 代码
Array.prototype.delete=function(){
        var arr=[];
        for(var i=0;i<this.length;i++){
            for(var j=i+1;j<this.length;j++){
                if(this[i]==this[j]){
                    arr.push(this.splice(j,1)[0]);//[0]是取出删除项数组中的元素
                }
            }
        }
        return arr;
    }
    var array=[1,5,12,34,23,12,5,36,12];
    var newArray=array.delete();
    console.log(newArray);

面试题(1)

3.请填充代码,使mySort()能使传入的参数按照从小到大的顺序显示出来。
function mySort() {
    var tags = new Array();//使用数组作为参数存储容器
    请补充你的代码
    return tags;//返回已经排序的数组
}
 
var result = mySort(50,11,16,32,24,99,57,100);/传入参数个数不确定
console.info(result);//显示结果(阿里)
  1. 分析
    • 在函数体内可以通过arguments对象来访问这个参数数组
    • 如果表示要迭代的对象的变量值为nullundefinedfor-in语句会抛出错误;ECMAScript 5对这种情况不再抛出错误,而是不执行循环体
    • 为了保证最大程度的兼容性,建议在使用for-in循环之前,先检测确认该对象值不是nullundefiend
    • null==undefined //true
  2. 代码
function mySort() {
        var tags = new Array();//使用数组作为参数存储容器
        if(tags!=null){
            for(var key in arguments){
                tags.push(arguments[key]);
            }
        }
        tags.sort(function(num1,num2){
            return num1-num2;
        })
        return tags;//返回已经排序的数组
    }
    var result = mySort(50,11,16,32,24,99,57,100);//传入参数个数不确定
    console.info(result);//显示结果(阿里)

面试题(1)

4.存在一个足够大的二维数组,每个数组中的值都是整数,使用javascript如何实现按每个数组中的平均值,从大到小排序这个二维数组?
  1. 分析
    • 封装两个函数分别实现排序和获取平均值
    • 利用选择排序进行排序
  2. 代码
function sortArray(array){
        if(array.length<2){
            return array;
        }else{
            for(var i=0;i<array.length-1;i++){
                for(var j=i+1;j<array.length;j++){
                    var arr1=average(array[i]);
                    var arr2=average(array[j]);
                    if(arr1<arr2){
                        var temp=array[i].slice(0);
                        array[i]=array[j].slice(0);
                        array[j]=temp;
                    }
                }
            }
        }
        return array;
    }
    function average(array){
        var sum=0;
        if(!array.length){
            return 0;
        }else{
            for(var i=0;i<array.length;i++){
                sum+=array[i];
            }
        }
        return sum/array.length;
    }
    var arr=[[1,2,5],[3,4,5],[1,1,1],[8,9,10]];
    var newArray=sortArray(arr);
    console.log(newArray);

面试题(1)

5.用Javascript实现乱序函数randomSort(array)函数,输出排序后的函数。如[1,2,3,4,5],输出[3,2,4,5,1]。要求N次以内不重复。
  1. 分析
    • num1,num2分别代表每次排序比较时的两个数组项。
    • sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组项作为参数传递给这个函数。当函数返回值为1的时候就交换两个数组项的顺序,否则就不交换。
  2. 代码
function randomSort(array){
        for(var i=0;i<array.length;i++){
            array.sort(function(num1,num2){
                return Math.random()>0.5?-1:1;
            });
        }
        return array;
    }
    var arr1=[1,2,3,4,5];
    var arr=randomSort(arr1);
    console.log(arr);

面试题(1)

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

解法1:

  1. 分析
    • 递归
    • 判断下每个元素是否是数组,如果是数组,递归再去遍历数组中的每一个元素,直至不是数组时,追加到新数组后面
  2. 代码
var arr = [1,[4,5,6,2,[[[7,8,9]]],3]];
    function transformArray(array){
        var temp=[];
        for(var i=0;i<array.length;i++){
            if(array[i] instanceof Array){
                temp=temp.concat(transformArray(array[i]));
            }else{
                temp.push(array[i]);
            }
        }
        return temp;
    }
    var newArray=transformArray(arr);
    console.log(newArray);

面试题(1)
解法2:

  1. 分析
    • 运用join()方法将多维数组转换为一个逗号分隔的字符串
    • 运用split()方法将用逗号分隔的字符串转换为一维数组,但返回数组中每个元素都是字符串
    • 可以用一元加操作符将字符串转换为数值
  2. 代码
var arr = [1,[4,5,6,2,[[[7,8,9]]],3]];
    function transformArray(array){
        var temp=array.join(",").split(",");
        var data=[];
        for(var key in temp){
            data.push(+temp[key]);
        }
        return data;
    }
    var newArray=transformArray(arr);
    console.log(newArray);

面试题(1)

7.解析url:var str = 'http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6'获得参数名和参数值:
  1. 分析
    • 运用split()方法用于把一个字符串分割成字符串数组
    • 字符串也可以用[]取值
  2. 代码
var str="http://s.weibo.com/weibo/Aralic?topnav=1&wvr=6";
    function getParm(str){
        return str.split("?")[1];
    }
    var parm=getParm(str);
    console.log(parm)

面试题(1)