任務(wù)18

問答

數(shù)組方法里push、pop盐捷、shift偶翅、unshift、join碉渡、split分別是什么作用?

  • push()
    方法添加一個或多個元素到數(shù)組的末尾聚谁,并返回數(shù)組新的長度(length 屬性值)。
  • pop()
    方法刪除一個數(shù)組中的最后的一個元素滞诺,并且返回這個元素形导。
  • shift()
    方法刪除數(shù)組的 第一個元素环疼,并返回這個元素。該方法會改變數(shù)組的長度朵耕。
  • unshift()
  • 方法在數(shù)組的開頭添加一個或者多個元素秦爆,并返回數(shù)組新的 length 值。
  • join()
    方法將數(shù)組中的所有元素連接成一個字符串憔披。
  • split()
    方法用于把一個字符串分割成字符串?dāng)?shù)組。

代碼題

數(shù)組

1.用 splice 實現(xiàn) push爸吮、pop芬膝、shift、unshift方法

splice實現(xiàn)push

function push(arr,val){
        arr.splice(arr.length,0,val);
        console.log(arr)
        return arr.length;
    }

splice實現(xiàn)pop

function pop(arr){
         return  arr.splice(arr.length-1,1)[0];    
     }

splice實現(xiàn)shift

function shift(arr){
     return arr.splice(0,1)[0]
 }

splice實現(xiàn)unshift

function unshift(arr,val){
     return arr.splice(0,0,val)[0]
 }

2.使用數(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>

實現(xiàn)代碼如下:

var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTplStr(data){
    var a = '<dl class="product">';
    a= a+'<dt>' + data.name + '</dt>';
    for (var i = 0; i < data.styles.length; i++) {
        a=a+'<dd>' + data.styles[i] + '</dd>';
    }
    a=a+ '</dl>';
    return a;
};
var result = getTplStr(prod);
console.log(result);

輸出結(jié)果為:

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

3.寫一個find函數(shù)形娇,實現(xiàn)下面的功能

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

實現(xiàn)代碼如下:

var arr = [ "test", 2, 1.5, false ];
find(arr, "test") // 0
find(arr, 2) // 1
find(arr, 0) // -1
function find(arr,val){
 return console.log(arr.indexOf(val));
}

輸出結(jié)果如下:



4锰霜、寫一個函數(shù)filterNumeric,把數(shù)組 arr 中的數(shù)字過濾出來賦值給新數(shù)組newarr桐早, 原數(shù)組arr不變

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

實現(xiàn)代碼如下:

var arr = ["a", "b", 1, 3, 5, "b", 2];
function filterNumeric(arr){
var newarr = [];
for(var i=0; i<arr.length; i++){
if(typeof arr[i] === 'number'){
newarr.push(arr[i]);
}
}
return newarr;
}
var newarr = filterNumeric(arr);
console.log(newarr);

輸出結(jié)果為:


5.對象obj有個className屬性癣缅,里面的值為的是空格分割的字符串(和html元素的class特性類似),寫addClass哄酝、removeClass函數(shù)友存,有如下功能:

var obj = {
  className: 'open menu'
}
addClass(obj, 'new') // obj.className='open menu new'
addClass(obj, 'open')  // 因為open已經(jīng)存在,所以不會再次添加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')  // 因為blabla不存在,所以此操作無任何影響

實現(xiàn)代碼如下:

var obj = {className : 'open menu'};
      function addClass(obj,cls){
        var classArr = obj.className.split(' ');
        for(var i=0; i<classArr.length; i++){
           if( cls === classArr[i] ){
            return;
           }
        }   
        obj.className += ' ' + cls;
      } 
       addClass(obj,'new');
       console.log(obj);
       addClass(obj, 'open');
       console.log(obj);
       addClass(obj, 'me');
       console.log(obj);
       console.log(obj.className);
    function removeClass(obj,cls){
      var classArr = obj.className.split(' ');
      for(var i=0; i<classArr.length; i++){
         if( cls === classArr[i] ){
              classArr.splice(i,1);
              i--;
         }
      }   
      obj.className = classArr.join(' ');
    }                   
      removeClass(obj, 'open') // obj.className='menu new me'
      console.log(obj);
      removeClass(obj, 'blabla')  // 不變     
      console.log(obj);

輸出的結(jié)果如下:



6.寫一個camelize函數(shù)搀军,把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串膨俐,如

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

實現(xiàn)代碼如下:

function camelize(str){
  var arr=str.split("-");
  if(arr.length===1){
    return str;
  }
  for(var i=1;i<arr.length;i++){
   arr[i] = arr[i][0].toUpperCase()+arr[i].substr(1);
  }
  return arr.join("");
}
console.log(camelize("background-color"));
console.log(camelize("list-style-image"));

輸出的結(jié)果為:


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

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

下面代碼輸出的結(jié)果為: (1)窗口彈出undefined (2)控制臺打印 hello hunger valley
原因如下:

(1)push( function() { alert(console.log('hello hunger valley')) } );就是push一個匿名函數(shù)放到了數(shù)組arr的最后一項
即arr=["a","b",function(){alert(console.log('hello hunger valley'))}]
(2)arr[arr.length-1]() 加括號變成了立即執(zhí)行函數(shù)
(3)所以控制臺打出 hello hunger valley罩句,也正因為console.log只在控制臺輸出焚刺,并不返回值,所以報undefind门烂。

8.寫一個函數(shù)isPalindrome,判斷一個字符串是不是回文字符串(正讀和反讀一樣乳愉,比如 abcdcba 是回文字符串, abcdefg不是)

function isPalindrome(val){
    for(var i=0;i<val.length;i++){
        if (val[i]==val[(val.length-1)-i]){
            return true
        }
        else{
            return false
        };
    };
}
isPalindrome("var")

9.寫一個ageSort函數(shù)實現(xiàn)數(shù)組中對象按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 ]

實現(xiàn)代碼如下:

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(arr){
    arr.sort(function(a,b){
        return a.age-b.age;
    });
}
console.log(people);
ageSort(people);

輸出結(jié)果為:



10.寫一個filter(arr, func) 函數(shù)用于過濾數(shù)組诅福,接受兩個參數(shù)匾委,第一個是要處理的數(shù)組,第二個參數(shù)是回調(diào)函數(shù)(回調(diào)函數(shù)遍歷接受每一個數(shù)組元素氓润,當(dāng)函數(shù)返回true時保留該元素赂乐,否則刪除該元素)。實現(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ù)

實現(xiàn)代碼如下:

function isNumeric (el){
    return typeof el === 'number'; 
}
arr = ["a",3,4,true, -1, 2, "b"]

function filter(arr,func){
    var val=arr.filter(func);
     return val;
}

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ù)
字符串

1.寫一個 ucFirst函數(shù)咖气,返回第一個字母為大寫的字符

ucFirst("hunger") == "Hunger"

實現(xiàn)代碼如下:

function ucFirst(arr){
    return arr[0].toUpperCase() + arr.substr(1);
}
ucFirst('hunger');

2.寫一個函數(shù)truncate(str, maxlength), 如果str的長度大于maxlength挨措,會把str截斷到maxlength長挖滤,并加上...,如

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

實現(xiàn)代碼如下:

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"
數(shù)學(xué)函數(shù)

1.寫一個函數(shù)浅役,獲取從min到max之間的隨機整數(shù)斩松,包括min不包括max

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

2.寫一個函數(shù),獲取從min都max之間的隨機整數(shù)觉既,包括min包括max

function getRandom(min,max){
    return Math.floor(Math.random()*(max-min+1))+min;
}

3.寫一個函數(shù)惧盹,獲取一個隨機數(shù)組,數(shù)組中元素為長度為len瞪讼,最小值為min钧椰,最大值為max(包括)的隨機整

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

4.寫一個函數(shù),生成一個長度為 n 的隨機字符串符欠,字符串字符的取值范圍包括0到9嫡霞,a到 z,A到Z希柿。

function getRandStr(len){
  //todo...
}
var str = getRandStr(10); // 0a3iJiRZap

實現(xiàn)代碼如下:

var str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
function getRandStr(len){
  randomStr="";
  for(var i=0;i<len;i++){
    randomStr+=str[Math.floor(Math.random()*str.length)];
  }
  return randomStr;  
}
getRandStr(10)//"kP3NdS6wOE"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诊沪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子曾撤,更是在濱河造成了極大的恐慌端姚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾戴,死亡現(xiàn)場離奇詭異寄锐,居然都是意外死亡,警方通過查閱死者的電腦和手機尖啡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門橄仆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衅斩,你說我怎么就攤上這事盆顾。” “怎么了畏梆?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵您宪,是天一觀的道長。 經(jīng)常有香客問我奠涌,道長宪巨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任溜畅,我火速辦了婚禮捏卓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慈格。我一直安慰自己怠晴,他們只是感情好遥金,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒜田,像睡著了一般稿械。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冲粤,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天美莫,我揣著相機與錄音,去河邊找鬼梯捕。 笑死茂嗓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的科阎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼忿族,長吁一口氣:“原來是場噩夢啊……” “哼锣笨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起道批,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤错英,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隆豹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椭岩,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年璃赡,在試婚紗的時候發(fā)現(xiàn)自己被綠了判哥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡碉考,死狀恐怖塌计,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侯谁,我是刑警寧澤锌仅,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站墙贱,受9級特大地震影響热芹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惨撇,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一伊脓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧串纺,春花似錦丽旅、人聲如沸椰棘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邪狞。三九已至,卻和暖如春茅撞,著一層夾襖步出監(jiān)牢的瞬間帆卓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工米丘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剑令,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓拄查,卻偏偏與公主長得像吁津,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堕扶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

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