JS數(shù)組凿将、字符串、數(shù)學(xué)函數(shù)

1.數(shù)組方法里push价脾、pop牧抵、shift、unshift侨把、join犀变、split分別是什么作用。

push:棧方法秋柄,先入后出获枝,向棧頂增加一個(gè)元素,返回新數(shù)組長(zhǎng)度。
pop:棧方法骇笔,先入后出省店,從棧頂刪除一個(gè)元素,返回被刪除的元素蜘拉。
shift:隊(duì)列方法萨西,先入先出,從隊(duì)列首部刪除一個(gè)元素,返回被刪除的元素旭旭。
unshift:隊(duì)列方法谎脯,先入先出,從隊(duì)列首部增加一個(gè)元素持寄,返回新數(shù)組長(zhǎng)度源梭。
join:將數(shù)組中的元素以join指定參數(shù)為連接符連接。
split:將字符串以指定參數(shù)為分隔符分割成數(shù)組稍味,指定的參數(shù)一定是原字符串中存在的废麻。


2.用 splice 實(shí)現(xiàn) push、pop模庐、shift烛愧、unshift方法

var arr=[0,1,2,3,4,5,6,7,8,9];
arr.splice(arr.length,0,10); //splice實(shí)現(xiàn)push
arr.splice(arr.length-1,1); //splice實(shí)現(xiàn)pop
arr.splice(0,1,-1); //splice實(shí)現(xiàn)shift,刪除首元素
arr.splice(0,0); //splice實(shí)現(xiàn)unshift掂碱,增加一個(gè)元素到隊(duì)首

3.使用數(shù)組拼接出如下字符串

var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTpl(data){
//todo...
};
/*
 getTpl(prod) //調(diào)用函數(shù)輸出如下內(nèi)容
<dl class="product"> 
<dt>女裝</dt> 
<dd>短款</dd> 
<dd>冬季</dd> 
<dd>春裝</dd>
</dl>
*/
function getTpl(data){
var htmlarr=[];//創(chuàng)建空數(shù)組存放html元素;
htmlarr.push('<dl class="product"> ');//棧頂增加新html元素
htmlarr.push('<dt>'+data.name+'</dt> ');//棧頂增加新html元素
data.styles.map(function(e,i,a){//styles數(shù)組中的每個(gè)元素使用回調(diào)函數(shù)創(chuàng)建html元素
htmlarr.push('<dd>'+e+'</dd> ');
})
htmlarr.push('</dl>');
console.log(htmlarr.join(""));//htmlarr數(shù)組中用""連接起來(lái)
};
getTpl(prod);//調(diào)用函數(shù)

4.寫(xiě)一個(gè)find函數(shù)怜姿,實(shí)現(xiàn)下面的功能

var arr = [ "test", 2, 1.5, false ]
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1

代碼如下:

function find(arr,num){
return arr.indexOf(num);
};


5.寫(xiě)一個(gè)函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過(guò)濾出來(lái)賦值給新數(shù)組newarr疼燥, 原數(shù)組arr不變

arr = ["a", "b", 1, 3, 5, "b", 2];
newarr = filterNumeric(arr);  //   [1,3,5,2]

代碼如下:

var arr = ["a", "b", 1, 3, 5, "b", 2];
        function filterNumberic(el){
        var newarr;
        return newarr=arr.filter(function(e){//filter方法返回滿足特定條件的元素組成的數(shù)組
        return typeof(e)==="number";
        })
      };
     filterNumberic(arr);
}

6.對(duì)象obj有個(gè)className屬性沧卢,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫(xiě)addClass醉者、removeClass函數(shù)但狭,有如下功能:

var obj = {
  className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open')  // 因?yàn)閛pen已經(jīng)存在披诗,所以不會(huì)再次添加open
addClass(obj, 'me') // me不存在,所以 obj.className變?yōu)?open menu new me'
console.log(obj.className)  // "open menu new me"

removeClass(obj, 'open') // 去掉obj.className里面的 open立磁,變成'menu new me'
removeClass(obj, 'blabla')  // 因?yàn)閎labla不存在呈队,所以此操作無(wú)任何影響

代碼如下:

var obj = {
  className: 'open menu'
      };

function addClass(obj,newstr){    //addClass函數(shù)
        var newarr;
        newarr=obj.className.split(" ");
        if(newarr.indexOf(newstr)<0){
          newarr.splice(newarr.length,0,newstr);
          obj.className=newarr.join(" ");
          return obj.className;
        }
        else{
          return obj.className;
        }
      }
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open')  // 因?yàn)閛pen已經(jīng)存在,所以不會(huì)再次添加open
addClass(obj, 'me') // me不存在息罗,所以 obj.className變?yōu)?open menu new me'
console.log(obj.className)  // "open menu new me"

function removeClass(obj,newstr){   //removeClass函數(shù)
    var newarr;
    newarr=obj.className.split(" ");
    if(newarr.indexOf(newstr)>=0){
      newarr.splice(newarr.indexOf(newstr),1);
      obj.className=newarr.join(" ");
      return obj.className;
    }
    else{
      return obj.className;
    }
  }
removeClass(obj, 'open') // 去掉obj.className里面的 open掂咒,變成'menu new me'
removeClass(obj, 'blabla')  // 因?yàn)閎labla不存在,所以此操作無(wú)任何影響

7.寫(xiě)一個(gè)camelize函數(shù)迈喉,把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串

camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

代碼如下:

function camelize(str){
  return str.split("-").join("");  //先分割開(kāi)再用join連接起來(lái)
}

8.如下代碼輸出什么?為什么?

arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );//輸出結(jié)果3温圆,arr數(shù)組中增加了一個(gè)元素function(){}
arr[arr.length-1]()  // 返回結(jié)果先彈出alert:undefined,再輸出數(shù)組中索引號(hào)為2的元素挨摸,即function(){}。'hello hunger valley'

9.寫(xiě)一個(gè)函數(shù)filterNumericInPlace岁歉,過(guò)濾數(shù)組中的數(shù)字得运,刪除非數(shù)字。要求在原數(shù)組上操作

arr = ["a", "b", 1, 3, 4, 5, "b", 2];
//對(duì)原數(shù)組進(jìn)行操作锅移,不需要返回值
filterNumericInPlace(arr);
console.log(arr)  // [1,3,4,5,2]

代碼如下:

arr = ["a", "b", 1, 3, 4, 5, "b", 2];
function filterNumbericInplace(arr){
  for(var i=0;i<arr.length;i++){
    if(typeof(arr[i])!=="number"){
      arr.splice(i,1);
      i--;
    }
  }
}
filterNumericInPlace(arr);
console.log(arr)  // [1,3,4,5,2]



10.寫(xiě)一個(gè)ageSort函數(shù)實(shí)現(xiàn)數(shù)組中對(duì)象按age從小到大排序

var john = { name: "John Smith", age: 23 };
var mary = { name: "Mary Key", age: 18 };
var bob = { name: "Bob-small", age: 6 };
var people = [ john, mary, bob ];
 function ageSort(people){
      people.sort(function(a,b){
        return a.age-b.age;
      })
 }
console.log(people)//輸出結(jié)果如下:
/*[Object, Object, Object]
0:Object
age:6
name:"Bob-small"
__proto__:Object

1:Object
age:18
name:"Mary Key"
__proto__:Object

2:Object
age:23
name:"John Smith"
__proto__:Object

length:3
__proto__:Array[0]
*/

11.寫(xiě)一個(gè)filter(arr, func) 函數(shù)用于過(guò)濾數(shù)組熔掺,接受兩個(gè)參數(shù),第一個(gè)是要處理的數(shù)組非剃,第二個(gè)參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個(gè)數(shù)組元素置逻,當(dāng)函數(shù)返回true時(shí)保留該元素,否則刪除該元素)备绽。實(shí)現(xiàn)如下功能

arr = ["a",3,4,true, -1, 2, "b"]
arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2], 過(guò)濾出數(shù)字
arr = filter(arr, isInt);//arr=[3,4,2]

代碼如下:

//構(gòu)造回調(diào)函數(shù)從數(shù)組中篩選出數(shù)字券坞、為正數(shù)的數(shù)字
//構(gòu)造函數(shù)篩選出數(shù)字
arr = ["a",3,4,true, -1, 2, "b"];

function isNumeric(el){
  if(typeof(el)==="number"){
    return el;
  }
}

function filter(arr,isNumeric){
  var newarr=arr.filter(isNumeric);
  return newarr;
}
filter(arr,isNumeric)//輸出結(jié)果[3,4,-1,2]



//構(gòu)造函數(shù)篩選出數(shù)字,且數(shù)字是正數(shù)
arr = ["a",3,4,true, -1, 2, "b"];

function isInt(el){
  if(typeof(el)==="number" && el>=0){
    return el
  }
}

function filter(arr,isInt){
  var newarr2=arr.filter(isInt);
  return newarr2;
}

filter(arr,isInt)//輸出結(jié)果[3,4,2]

12.寫(xiě)一個(gè) ucFirst函數(shù)肺素,返回第一個(gè)字母為大寫(xiě)的字符.

//實(shí)現(xiàn)  ucFirst("hunger") == "Hunger"
function ucFirst(el){
  var newstring=el[0].toUpperCase()+el.substring(1)
  return newstring;
}
ucFirst("hunger") 
//返回結(jié)果為 "Hunger"

13.寫(xiě)一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength恨锚,會(huì)把str截?cái)嗟絤axlength長(zhǎng),并加上...倍靡,如下

truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"

代碼如下:

function truncate(str,maxlength){
  if(str.length>maxlength){
    return str.substring(0,maxlength)+"...";
  } else{
    return str.substring(0,maxlength);
  }
}
truncate("hello, this is hunger valley,", 10));//返回"hello, thi..."
truncate("hello world", 20))//返回"hello world"

14.寫(xiě)一個(gè)函數(shù)猴伶,獲取從min到max之間的隨機(jī)整數(shù),包括min不包括max

function randomnum1(el1,el2){
  return Math.floor(Math.random()*(el2-el1)+el1);//向下取整數(shù)
}

15.寫(xiě)一個(gè)函數(shù)塌西,獲取從min都max之間的隨機(jī)整數(shù)他挎,包括min包括max

function randomnum2(el1,el2){
  return Math.floor(Math.random()*(el2-el1+1)+el1)
}

16.寫(xiě)一個(gè)函數(shù),獲取一個(gè)隨機(jī)數(shù)組雨让,數(shù)組中元素為長(zhǎng)度為len雇盖,最小值為min,最大值為max(包括)的隨機(jī)整數(shù)

function randomnum3(len,min,max){
  var newarr=[];
  for(var i=0;i<len;i++){
    newarr[i]=Math.floor(Math.random()*(max-min+1)+min)
  }
  return newarr
}

17.寫(xiě)一個(gè)函數(shù)栖忠,生成一個(gè)長(zhǎng)度為 n 的隨機(jī)字符串崔挖,字符串字符的取值范圍包括0到9贸街,a到 z,A到Z

function getRandStr(len){
  var str="0123456789abcdefthijklmnopqrstuvwxyzABCDEFTHIJKLMNOPQRSTUVWXYZ"
  var newstr=[];
  for(var i=0;i<len;i++){
    newstr[i]=str[Math.floor(Math.random()*(str.length+1))]
  }
  return newstr.join("");
}
var str = getRandStr(3);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狸相,一起剝皮案震驚了整個(gè)濱河市薛匪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脓鹃,老刑警劉巖逸尖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘸右,居然都是意外死亡娇跟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)太颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苞俘,“玉大人,你說(shuō)我怎么就攤上這事龄章〕砸ィ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵做裙,是天一觀的道長(zhǎng)岗憋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锚贱,這世上最難降的妖魔是什么仔戈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮惋鸥,結(jié)果婚禮上杂穷,老公的妹妹穿的比我還像新娘。我一直安慰自己卦绣,他們只是感情好耐量,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著滤港,像睡著了一般廊蜒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溅漾,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天山叮,我揣著相機(jī)與錄音,去河邊找鬼添履。 笑死屁倔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暮胧。 我是一名探鬼主播锐借,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼问麸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了钞翔?” 一聲冷哼從身側(cè)響起严卖,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎布轿,沒(méi)想到半個(gè)月后哮笆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汰扭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年稠肘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝毛。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡启具,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊泳,到底是詐尸還是另有隱情,我是刑警寧澤拷沸,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布色查,位于F島的核電站,受9級(jí)特大地震影響撞芍,放射性物質(zhì)發(fā)生泄漏秧了。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一序无、第九天 我趴在偏房一處隱蔽的房頂上張望验毡。 院中可真熱鬧,春花似錦帝嗡、人聲如沸晶通。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狮辽。三九已至,卻和暖如春巢寡,著一層夾襖步出監(jiān)牢的瞬間喉脖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工抑月, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留树叽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓谦絮,卻偏偏與公主長(zhǎng)得像题诵,于是被迫代替她去往敵國(guó)和親洁仗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容