1. TOPN 排序
有一字符串?dāng)?shù)組string(),對應(yīng)有一個(gè)權(quán)重?cái)?shù)組int[ ]沉唠,現(xiàn)按照如下規(guī)則取出字符串?dāng)?shù)組的top5:
1)對每個(gè)數(shù)組求綜合得分古劲,綜合得分=權(quán)重得分+順序得分掰曾,權(quán)重打得分對應(yīng)的權(quán)重值授账,順序得分為字符串在字符串?dāng)?shù)組中的順序號(從1開始)
2)按綜合得分升序排列,綜合得分相同改备,按照原先順序排列控漠,然后輸出
function top5_parms(str,weight,n) {
var _sum=[];
var _top5=[];
var index;
for(var i=0;i<str.length;i++){
_sum[i]=i+weight[i]+1;
}
for(var k=0;k<n;k++){
var _max=Math.max.apply(Math,_sum);
var _min=Math.min.apply(Math,_sum);
for(var j=0;j<_sum.length;j++){
if(_sum[j]==_min){
index=j;
console.log(index);
_top5[k]=str[index];
_sum.splice(index,1,_max+1);
break;
}
}
}
console.log(_top5.join("")); // CDBFA
}
var _str=["A","B","C","D","E","F","G","H"];
var _weight=[7,5,3,2,6,1,4,9];
top5_parms(_str,_weight,5);
2. phoneNumber
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
function phnum(n1,n2){
var numbs = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'};
var res=[];
if((n1==1)||(n2==1)){
return null;
}
for(var i=0;i<numbs[n1].length;i++){
for(var j=0;j<numbs[n2].length;j++){
res.push(numbs[n1][i]+numbs[n2][j]);
}
}
return res.toString()
}
phnum(1,3);
3. arguments 對象 和 正則
(function(window) {
function fn(str) {
this.str = str;
}
fn.prototype.format = function() {
var arg = arguments;
return this.str.replace(/\?\?\{(\d+)\}/ig, function(a, b) {
return arg[b] || '';
})
};
window.fn = fn;
})(window);
// use
var t = new fn('<p><a href="??{0}">??{1}</a><span>??{2}</span></p>');
console.log(t.format('http://Alibaba.com','Alibaba','welcome'));
4. MySQL查詢語句中加limit
對于MySQL查詢語句,我們可以加上limitN來限制查詢條數(shù)悬钳,但是如果查詢語句中已經(jīng)加油limitN盐捷,則不能再加limitN,請寫程序判斷sql查詢語句是否加上limit N默勾。答案為yes和no碉渡,通過逗號分隔,例如yes母剥,no滞诺,no
function add_limit(_str) {
var res=[];
for(var i=0;i<_str.length;i++){
if(_str[i].indexOf("limit")==-1){
res.push("yes");
}else{
res.push("no");
}
}
console.log(res.toString());
}
var _strlist=[
"select * from table",
"select * from table limit 1000",
"select * from (select * from table limit 10000) sub_qry"];
add_limit(_strlist);
5. 列出JavaScript的繼承實(shí)現(xiàn)方式,并使用一種你喜歡的方式實(shí)現(xiàn)如下繼承
1)parent包含 共有方法:pubFun环疼;私有方法:priFun
2)Child繼承parent
使用es6實(shí)現(xiàn)
1)繼承第一種方式:對象冒充
function Parent(username){
this.username = username;
this.hello = function(){
alert(this.username);
}
}
function Child(username,password){
//通過以下3行實(shí)現(xiàn)將Parent的屬性和方法追加到Child中习霹,從而實(shí)現(xiàn)繼承
//第一步:this.method是作為一個(gè)臨時(shí)的屬性,并且指向Parent所指向的對象炫隶,
//第二步:執(zhí)行this.method方法淋叶,即執(zhí)行Parent所指向的對象函數(shù)
//第三步:銷毀this.method屬性,即此時(shí)Child就已經(jīng)擁有了Parent的所有屬性和方法
this.method = Parent;
this.method(username);//最關(guān)鍵的一行
delete this.method;
this.password = password;
this.world = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
2伪阶、繼承第二種方式:call()方法方式
call方法是Function類中的方法
call方法的第一個(gè)參數(shù)的值賦值給類(即方法)中出現(xiàn)的this
call方法的第二個(gè)參數(shù)開始依次賦值給類(即方法)所接受的參數(shù)
function test(str){
alert(this.name + " " + str);
}
var object = new Object();
object.name = "zhangsan";
test.call(object,"langsin");//此時(shí)煞檩,第一個(gè)參數(shù)值object傳遞給了test類(即方法)中出現(xiàn)的this,而第二個(gè)參數(shù)"langsin"則賦值給了test類(即方法)的str
function Parent(username){
this.username = username;
this.hello = function(){
alert(this.username);
}
}
function Child(username,password){
Parent.call(this,username);
this.password = password;
this.world = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
3栅贴、繼承的第三種方式:apply()方法方式
apply方法接受2個(gè)參數(shù)斟湃,
A、第一個(gè)參數(shù)與call方法的第一個(gè)參數(shù)一樣檐薯,即賦值給類(即方法)中出現(xiàn)的this
B凝赛、第二個(gè)參數(shù)為數(shù)組類型,這個(gè)數(shù)組中的每個(gè)元素依次賦值給類(即方法)所接受的參數(shù)
function Parent(username){
this.username = username;
this.hello = function(){
alert(this.username);
}
}
function Child(username,password){
Parent.apply(this,new Array(username));
this.password = password;
this.world = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();
4坛缕、繼承的第四種方式:原型鏈方式墓猎,
即子類通過prototype將所有在父類中通過prototype追加的屬性和方法都追加到Child,從而實(shí)現(xiàn)了繼承
function Person(){
}
Person.prototype.hello = "hello";
Person.prototype.sayHello = function(){
alert(this.hello);
}
function Child(){
}
Child.prototype = new Person();//這行的作用是:將Parent中將所有通過prototype追加的屬性和方法都追加到Child祷膳,從而實(shí)現(xiàn)了繼承
Child.prototype.world = "world";
Child.prototype.sayWorld = function(){
alert(this.world);
}
var c = new Child();
c.sayHello();
c.sayWorld();
5陶衅、繼承的第五種方式:混合方式
混合了call方式屡立、原型鏈方式
function Parent(hello){
this.hello = hello;
}
Parent.prototype.sayHello = function(){
alert(this.hello);
}
function Child(hello,world){
Parent.call(this,hello);//將父類的屬性繼承過來
this.world = world;//新增一些屬性
}
Child.prototype = new Parent();//將父類的方法繼承過來
Child.prototype.sayWorld = function(){//新增一些方法
alert(this.world);
}
var c = new Child("zhangsan","lisi");
c.sayHello();
c.sayWorld();
6.編寫SUM函數(shù)
實(shí)現(xiàn)不定量的參數(shù)求和直晨,非number類型參數(shù)需要過濾
function sumArg(arguments) {
var res=0;
for(var i=0;i<arguments.length;i++){
if(isNaN(arguments[i])){
continue;
}
res+=arguments[i];
}
console.log(res);
}
var arguments=[1,2,"welcome",4];
sumArg(arguments);
7. 尋找周期
給定一個(gè)日期數(shù)組Date[]搀军,數(shù)組按照某一周期遞增,尋找該周期勇皇。
輸出結(jié)構(gòu)請輸出數(shù)字加單位(year罩句、month、day敛摘、hour门烂、minute、second)的形式兄淫,如5month屯远、10second。
var _parms_date=["20170101 00:02:01","20170101 05:04:02","20170101 10:06:03","20170101 15:08:04"];
function countRangeDate(parms) {
var res=[];
var _newparms=[];
for(var i=0;i<parms.length;i++){
var _stri=parms[i].substr(0,4)+"-"+parms[i].substr(4,2)+"-"+parms[i].substr(6,2)+" "+parms[i].substr(9);
_newparms.push(new Date(_stri));
}
for(var j=0;j<_newparms.length-1;j++){
var _year=(_newparms[j+1].getFullYear()-_newparms[j].getFullYear());
var _month=(_newparms[j+1].getMonth()-_newparms[j].getMonth());
var _date=(_newparms[j+1].getDate()-_newparms[j].getDate());
var _time=(_newparms[j+1].getTime()-_newparms[j].getTime());
var _hour=parseInt(_time/1000/60/60);
var _minute=parseInt(_time/1000/60%60);
var _second=_time/1000%60;
_year+=_year!=0?"year":"";
_month+=_month!=0?"month":"";
_date+=_date!=0?"day":"";
_hour+=_hour!=0?"hour":"";
_minute+=_minute!=0?"minute":"";
_second+=_second!=0?"second":"";
res.push(_year+_month+_date+_hour+_minute+_second);
}
console.log(res);
return(res[0]);
}
countRangeDate(_parms_date);
8.字符串排序
給定一個(gè)字符串?dāng)?shù)組string [] 捕虽,按照規(guī)則進(jìn)行排序慨丐,規(guī)則A->B意為A必須在B左邊。輸出所有可能的排序結(jié)果泄私,輸出結(jié)果按照字符序排列房揭,用逗號隔開。
沒有做出來
function test(parms,rules){
var str=[];
/*排序,排列出所有rules的可能情況*/
var sum=1;
for(var x=1;x<=rules.length;x++){
sum*=x;
}
console.log(sum);
var index_arr=[];
for(var xu=0;xu<sum;xu++){
var index=[];
for(var indextemp=0;indextemp<rules.length;indextemp++){
var indexttt=parseInt(Math.random()*rules.length);
if(index.indexOf(rules[indexttt])==-1){
index.push(rules[indexttt]);
}else{
indextemp--;
}
}
index_arr[xu]=index;
for(var ind=0;ind<index_arr.length-1;ind++){
if(index_arr[index_arr.length-1].join('')==index_arr[ind].join('')){
xu--;
}
}
}
var temp=[].concat(parms);
/*數(shù)組*/
for(var t=0;t<sum;t++){
// var temp=parms;
// console.log(temp);
for(var i=0;i<index_arr[t].length;i++){
var a1=index_arr[t][i].split('->')[0];
var a2=index_arr[t][i].split('->')[1];
var index1=temp.indexOf(a1);
var index2=temp.indexOf(a2);
/*刪除再加到最前面晌端,最后面*/
temp.splice(index1,1);
temp.unshift(a1);
temp.splice(index2,1);
temp.push(a2);
}
str[t]=[];
str[t].push(temp);
console.log(str[t].join(''));
}
}
var parms=['A','B','C','D'];
var rules=['A->C','B->C','D->C'];
// var parms=['A','B','C','D','E','F'];
// var rules=['A->C','C->B','C->D','A->B','D->F','C->E','B->E'];
test(parms,rules);
9.解析類型
給定一個(gè)字符串捅暴,解析出相應(yīng)的類型(只有Boolean,number咧纠,date蓬痒,string四種)
Boolean 類型:true、false惧盹,不區(qū)分大小寫
number 包括整數(shù)乳幸,浮點(diǎn)型,科學(xué)計(jì)數(shù)
date 滿足yyyyMMdd 或者yyyyMMdd hh:mm:ss
function typeStr() {
var _str=[-100.1,"ABCD","TRUE","20170101 03:05:06"];
var _regB=/(true|false)/ig;
var _regD=/^[1-9]\d{7}(||\s{0,2}\d{2}\:\d{2}\:\d{2})/;
var _res=[];
for(var i=0;i<_str.length;i++){
if(_regB.test(_str[i])){
console.log("Boolean");
_res.push("Boolean");
}else if(typeof(_str[i])=="number"){
console.log("Number");
_res.push("Number");
}else if(_regD.test(_str[i])){
console.log("Date");
_res.push("Date");
}else{
console.log("String");
_res.push("String");
}
}
console.log(_regD.test(_str[1]));
console.log(_res.toString());
return _res.toString();
}
typeStr();