任務(wù)18作業(yè)

問答

數(shù)組方法里push、pop士败、shift闯两、unshift、join谅将、split分別是什么作用?

  • push 從字面意義講有推得意思漾狼,然而在JavaScript數(shù)組中他的作用是在數(shù)組末尾推入push后括號(hào)里的內(nèi)容;而pop從字面意義上講其有出現(xiàn)饥臂、伸出之意逊躁,在數(shù)組中其與push剛好相反,則是在數(shù)組末尾刪除pop后括號(hào)里的內(nèi)容擅笔。例如:
var a =[2,3,4,5]
a.push(1)
5  //這里顯示原數(shù)組+新推入的內(nèi)容之后 數(shù)組的長(zhǎng)度
a 
[2, 3, 4, 5, 1]
a.pop(1)
1 //顯示所刪除的內(nèi)容
a
[2, 3, 4, 5]
  • shift的英文意思有去掉之意志衣,因此在JavaScript數(shù)組中是指去掉(刪除)第一項(xiàng)shift()括號(hào)里的內(nèi)容。而unshift正好與此相反猛们,則是在數(shù)組中第一項(xiàng)之前加入unshift()括號(hào)里的內(nèi)容念脯。例如:
var b =[2,3,4,5]
b.shift(2)// 刪除數(shù)組里的2
2
b //檢查下刪除后的數(shù)組b
[3, 4, 5]
b.unshift(0,1,2)//在數(shù)組中加入0,1,2
6  //顯示數(shù)組b加入新內(nèi)容后的總長(zhǎng)度
b
[0, 1, 2, 3, 4, 5]
  • join從字面意義上講就有連接的意思,而在數(shù)組中是將數(shù)組里的內(nèi)容拼接成一個(gè)字符串弯淘,而且不會(huì)改變?cè)瓟?shù)組绿店。例如:
var x=[1,2,3,4]
x.join("-")
"1-2-3-4"
x
[1, 2, 3, 4]
x.join('*')
"1*2*3*4"
x
[1, 2, 3, 4]
  • split從字面意義上講是分裂,分開的意思庐橙;而在JavaScript中split() 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組假勿;
    而字符串是由單引號(hào)或雙引號(hào)包裹的字符序列,在使用split()后則可轉(zhuǎn)換成數(shù)組态鳖。但是同樣不會(huì)改變?cè)械淖址?/li>
var str="a,b,c,d,e";
str.split();
["a,b,c,d,e"]
str
"a,b,c,d,e"
str.split("*");
["a,b,c,d,e"]
str.split(' ')
["a,b,c,d,e"]
str.split('* *');
["a,b,c,d,e"]
var str2 ="hello,world";
undefined
str2.split();
["hello,world"]
str2
"hello,world"
str2.split('',1)
["h"]
str2
"hello,world"
str2.length  //查看下str2的長(zhǎng)度
11     顯示為11转培,在此證明""里的所有字符都是有效的。

代碼

用 splice 實(shí)現(xiàn) push浆竭、pop浸须、shift、unshift方法邦泄?

  • push是在對(duì)象的末尾添加字符删窒,那么他在用splice(a,b,c)表示的時(shí)候應(yīng)該也必須是能在末尾添加,函數(shù)如下:
var arr =[2,3,4,5,6];
function push(arr,val){  
arr.splice(arr.length,0,val);//其中val代表需要push的值顺囊,經(jīng)過測(cè)試該函數(shù)一次只能push一個(gè)值.    
return arr.length;//返回?cái)?shù)組的長(zhǎng)度}
//欲多push幾個(gè)值肌索,可以多加幾個(gè)val.
function push(arr,val,val2,val3){  
arr.splice(arr.length,0,val,val2,val3); 
return arr.length; //返回?cái)?shù)組的長(zhǎng)度
}

  • pop是在數(shù)組的末尾刪除字符,而splice中刪除的時(shí)候末尾一位的索引是length-1特碳,所以函數(shù)如下:
function pop(arr){  
  arr.splice(arr.length-1,1);  
  return arr.length;
}

*shift是去除數(shù)組的第一位诚亚,而在splice中刪除第一位索引則為0晕换,個(gè)數(shù)必須等于1,大于1的時(shí)候就是截取幾位,函數(shù)如下:

function shift(arr){ 
   arr.splice(0,1);   
 return arr.length;
}
  • unshift則是指在數(shù)組的第一位之前加入字符或者值亡电,因此其函數(shù)為:
  function unshift(arr,val){  
   arr.splice(0,0,val); 
   return arr.length;}

綜上函數(shù)只適用于添加一個(gè)數(shù)字届巩,欲添加多個(gè)數(shù)字或者字符,請(qǐng)?jiān)O(shè)置多個(gè)變量val.

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

var prod = { name: '女裝',
styles: ['短款', '冬季', '春裝']};
function getTpl(data){
//todo...};
var result = getTplStr(prod); //result為下面的字符串

<dl class="product"> 
 <dt>女裝</dt>
 <dd>短款</dd> 
<dd>冬季</dd> 
<dd>春裝</dd>
</dl>

代碼如下:

function getTpl(data){   
var htmls=[];   
htmls.push('<dl class="product">');   
htmls.push('<dt>'+data.name+'</dt>');   
for(var i=0;i<data.styles.length;i++){   
 htmls.push('<dd>'+data.styles[i]+'</dd>'); } // 遍歷styles里邊的每一項(xiàng)份乒;
 htmls.push('</dl>');  
 console.log(htmls.join(''));}  //拼接html里的字符
getTpl(prod);//執(zhí)行函數(shù)

寫一個(gè)find函數(shù)恕汇,實(shí)現(xiàn)下面的功能 (***)

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

函數(shù)如下:

var arr = [ "test", 2, 1.5, false ];
function find(arr,val){   
 var i=0; 
 i<arr.length;
i++; 
if(val ===arr[i]){    
   console.log(i);   }
else{      
 console.log(-1);   }}

寫一個(gè)函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過濾出來賦值給新數(shù)組newarr或辖, 原數(shù)組arr不變

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

函數(shù)代碼如下:

function filterNumeric(arr){ 
   var arr1=arr.slice(2,5);
    var arr2=arr.slice(6,7);  
  console.log(arr1.concat(arr2));};

對(duì)象obj有個(gè)className屬性瘾英,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫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ì)再次添加
openaddClass(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不存在,所以此操作無任何影響

函數(shù)代碼如下:

 var obj = { 
    className: 'open menu' };
 function addClass(obj,val){   
  var arr =obj.className.split( ' ');   //將obj.classname轉(zhuǎn)化成數(shù)組县爬。
  console.log(arr);   // 看下轉(zhuǎn)化后的數(shù)組
 for(var i=0;i<arr.length;i++){  
       if(val ===arr[i]){          //條件判斷下
   return;         }     
    else{        
     arr.push(val);         }    
 }  
   console.log(arr);  //在顯示下添加字符后的數(shù)組
  obj.className=arr.join( ' ') } 將轉(zhuǎn)化后的數(shù)組重新賦值給obj.className
//remove函數(shù):
function removeClass(obj,val){ 
  var arr =obj.className.split( ' ');    
 console.log(arr);  
  for (var i = 0; i < arr.length; i++) {     
   if (val === arr[i]) {   
       arr.splice(i, 1);    
    }    }  
  obj.className = classArr.join(' '); }

寫一個(gè)camelize函數(shù)阳啥,把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如:

 var str ="list-style-image";
 function camelize(str) { 
    var arr=str.split("-");    //將字符串轉(zhuǎn)化成數(shù)組
 for(var i=0;i<arr.length;i++){    
     arr[i]=arr[i].replace(arr[i][0],arr[i][0].toUpperCase()); //首字母替換成大寫     }
    return arr.join( ''); }
camelize(str);

如下代碼輸出什么财喳?為什么? (***)

arr = ["a", "b"];
arr.push( function() { alert(console.log('hello hunger valley')) } );
arr[arr.length-1]() // ?

在上面這段代碼中察迟,arr.push說明是向數(shù)組arr中末尾推入元素,現(xiàn)在push后的括號(hào)內(nèi)是一個(gè)函數(shù)耳高,經(jīng)過分析該函數(shù)表達(dá)結(jié)果就是一個(gè)函數(shù)因此是向arr數(shù)組中推入function函數(shù)扎瓶。如下:
["a", "b", anonymous()]
而arr[arr.length-1]()毫無意義的標(biāo)識(shí),因此會(huì)報(bào)錯(cuò)泌枪。

寫一個(gè)函數(shù)filterNumericInPlace概荷,過濾數(shù)組中的數(shù)字,刪除非數(shù)字碌燕。要求在原數(shù)組上操作:

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

寫一個(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 ]
ageSort(people) // [ bob, mary, john ]

代碼:

function ageSort(arr){
arr.sort(function(a,b){
return a.age-b.age;});}
ageSort(people);
console.log(people);

寫一個(gè)filter(arr, func)函數(shù)用于過濾數(shù)組乍赫,接受兩個(gè)參數(shù),第一個(gè)是要處理的數(shù)組陆蟆,第二個(gè)參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個(gè)數(shù)組元素,當(dāng)函數(shù)返回true時(shí)保留該元素惋增,否則刪除該元素)叠殷。實(shí)現(xiàn)如下功能:

function isNumeric (el){ return typeof el === 'number'; }
arr = ["a",3,4,true, -1, 2, "b"]
arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2], 
過濾出數(shù)字arr = filter(arr, function(val) { return typeof val === "number" && val > 0 }); 
// arr = [3,4,2] 過濾出大于0的整數(shù)

代碼如下:

// 先篩選數(shù)組函數(shù)如下:
arr = ["a",3,4,true, -1, 2, "b"];
 function isNumeric(arr){     
for(var i=0;i<arr.length;i++){     
    if(typeof arr[i] !=="number" ){   
     arr.splice(i,1);         }  
   }   
  console.log(arr); }
 isNumeric(arr); //篩選出數(shù)組里邊的數(shù)字 顯示arr=[3,4,-1,2];
 function fitter(arr){  
    for(var j=0;j<arr.length;j++){ 
         if(arr[j]< 0){     
         arr.splice(j,1);        
  }      }    
  console.log(arr);  
}
fitter(arr);// 返回?cái)?shù)組arr=[3,4,2];

字符串

寫一個(gè) ucFirst函數(shù),返回第一個(gè)字母為大寫的字符:

ucFirst("hunger") == "Hunger"

函數(shù)如下:

var str="hello";
function ucFirst(str){  
return str[0].toUpperCase()+str.slice(1);}
ucFirst(str);

寫一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength诈皿,會(huì)把str截?cái)嗟絤axlength長(zhǎng)林束,并加上...

像棘,如 :
代碼如下:

var str = "hello world"; 
function truncate(str,maxLength){ 
   if(str.length <= str.maxLength){      
      return str;    }else{    
    return str.slice(0,maxLength)+'....';    } }
console.log(truncate("baby,I love you",10));
// 返回baby,I lov....

數(shù)學(xué)函數(shù)

寫一個(gè)函數(shù),獲取從min到max之間的隨機(jī)整數(shù)壶冒,包括min不包括max :

function rand1(min.max){
      retrun Math.floor(Math.random()* (max - min) + min);
}

寫一個(gè)函數(shù)缕题,獲取從min都max之間的隨機(jī)整數(shù),包括min包括max:

function rand2(min,max){
      retrun Math.floor(Math.random()*(++max-min)+min);
}

寫一個(gè)函數(shù)胖腾,獲取一個(gè)隨機(jī)數(shù)組烟零,數(shù)組中元素為長(zhǎng)度為len,最小值為min咸作,最大值為max(包括)的隨機(jī)整數(shù):

function rand3(len,min,max) {

 var arr = [];

 for(var i = 0; i < len; i++){

 arr.push(Math.floor(Math.random()* (max+1-min)) + min);

 }

 return arr;

}

console.log(rand3(20,1,10));
//返回[6, 3, 2, 8, 1, 2, 9, 2, 5, 2, 8, 7, 10, 2, 3, 2, 7, 8, 5, 1]

寫一個(gè)函數(shù)锨阿,生成一個(gè)長(zhǎng)度為 n 的隨機(jī)字符串,字符串字符的取值范圍包括0到9记罚,a到 z墅诡,A到Z。:

function getRandStr(len){

 var str = '';

 var obj= '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

 for(var i = 0; i < len; i++){

 str += dict[Math.floor(Math.random()*obj.length)];

 }

 return str;

}

var str = getRandStr(8); 

console.log(str);
// 返回oXivFBGj

轉(zhuǎn)載聲明:本文章中所有版權(quán)歸饑人谷所有桐智,若需轉(zhuǎn)載末早,請(qǐng)注明來源,謝謝说庭!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末然磷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子口渔,更是在濱河造成了極大的恐慌样屠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缺脉,死亡現(xiàn)場(chǎng)離奇詭異痪欲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)攻礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門业踢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人礁扮,你說我怎么就攤上這事知举。” “怎么了太伊?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雇锡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我僚焦,道長(zhǎng)锰提,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮立肘,結(jié)果婚禮上边坤,老公的妹妹穿的比我還像新娘。我一直安慰自己谅年,他們只是感情好茧痒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著融蹂,像睡著了一般旺订。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殿较,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天耸峭,我揣著相機(jī)與錄音,去河邊找鬼淋纲。 笑死劳闹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洽瞬。 我是一名探鬼主播本涕,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼伙窃!你這毒婦竟也來了菩颖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤为障,失蹤者是張志新(化名)和其女友劉穎晦闰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳍怨,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呻右,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鞋喇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声滥。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侦香,靈堂內(nèi)的尸體忽然破棺而出落塑,到底是詐尸還是另有隱情,我是刑警寧澤罐韩,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布憾赁,位于F島的核電站,受9級(jí)特大地震影響散吵,放射性物質(zhì)發(fā)生泄漏龙考。R本人自食惡果不足惜膘壶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洲愤。 院中可真熱鬧,春花似錦顷锰、人聲如沸柬赐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肛宋。三九已至,卻和暖如春束世,著一層夾襖步出監(jiān)牢的瞬間酝陈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工毁涉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沉帮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓贫堰,卻偏偏與公主長(zhǎng)得像穆壕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子其屏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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