JavaScript——关于列表权重的笔试题

时间:2022-02-25 19:00:19
昨天晚上参加某公司的校招笔试的最后一题,由于时间上的问题导致自己在做最后一道题的时候总感觉力不从心,明明会的问最终还是没有写出完整的最终结果。我还不相信了,于是今天下午花了点时间整理了一下,将答案最终完整的写了出来。先贴在下面,仅供后来的人参考。(由于楼主实力有限,如果不妥请见谅)

题目大概是:有一个名为priorityList的列表,向列表项中加入列表参数。例如priorityList.add("item1",5);其中第一个数是列表参数。第二个是权重。根据输入列表项中的各项的权重,对列表项进行有序的输出。

比如:priorityList.add("item1",5);

                    priorityList.add("item2",1);
                    向列表中加入两项。最终利用priorityList.print()按照输入列表项的权重输出"item2","item1";

分析一下:对于列表项,我们可以使用javascript中的Array来存放对应的列表项。但是Array数组类型中没有add以及print的方法,所以我们需要自己创建这样的新功能。所以我们可以使用Array.prototype构造原型对象的方法,构造Array构造函数的新的可以继承的方法add和print。然后就是基本的一些数据类型的转换以及排序的问题。现将对应的函数清单列如下:

Array.prototype={

add:function(str,num){

var a=new Array();

a.push(arguments[0]);

a.push(arguments[1]);

var result=a.toString();

this[this.length]=result.split(",")[0];

this[this.length]=result.split(",")[1];

return this;

},

print:function(){

var b=new Array();

var num1=0,index=0;

for(var i=1;i<this.length;i=i+2){

b[num1++]=this[i];

}

b=b.sort(function(x,y){return x-y;});

for(var j=0;j<this.length/2;j++){

for(i=1;i<this.length;i=i+2){  

if(this[i] == b[index]){  

b[index]=this[i-1];  

index++;

}

}

}

return b;

}

}

var priorityList=new Array();

priorityList.add("item1",5);

priorityList.add("item2",1);

priorityList.add("item3",8);

priorityList.add("item4",3);

console.log(priorityList.print());

这样就可以基本上实现上述的功能。