面试题(1)

版权声明:(๑╹◡╹)ノ""" https://blog.csdn.net/qq_41218152/article/details/82768703

面试题(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); 
输出结果:

在这里插入图片描述

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);

在这里插入图片描述

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);//显示结果(阿里)

在这里插入图片描述

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);

在这里插入图片描述

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);

在这里插入图片描述

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);

在这里插入图片描述
解法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);

在这里插入图片描述

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)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41218152/article/details/82768703