練習(xí)平臺(tái)Codewars地址:https://www.codewars.com/

歡迎和大家一起來(lái)討論~╭( ???)? ??

 

基礎(chǔ)練習(xí)(1):

 

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

我的解答為:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

class SmallestIntegerFinder {
  findSmallestInt(args) {    var a = args[0];    for(var i=0; i<args.length; i++){      if(args[i] <= a){
        a = args[i];
      }
    }    return a;
  }
}

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

較優(yōu)解答為:

class SmallestIntegerFinder {
  findSmallestInt(args) {    return Math.min.apply(null, args);
  }
}

分析:

可以看出我所想到使用的方法仍處于比較初級(jí)的階段,沒有想到用Math對(duì)象的方法實(shí)現(xiàn)。使用方法可以減少代碼量,更簡(jiǎn)潔。也說(shuō)明了對(duì)于常用方法這部分的內(nèi)容還不熟練。

筆記:

Math.min()方法和Math.max()方法的作用是用于確定一組數(shù)值中的最小值和最大值??梢越邮杖我舛鄠€(gè)數(shù)值參數(shù)。

 

apply()方法的作用是在特定的作用域中調(diào)用函數(shù),相當(dāng)于設(shè)置函數(shù)體內(nèi)thisUI想的值。apply()方法接收兩個(gè)參數(shù):一個(gè)是在其中運(yùn)行函數(shù)的作用域,另一個(gè)是參數(shù)數(shù)組。

相似的另一個(gè)方法call()方法,與apply()方法有同樣的作用,區(qū)別在于接收參數(shù)的方式不同。call()方法接收的第一個(gè)參數(shù)也為this值,其余參數(shù)都直接傳遞給函數(shù),傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來(lái)。

apply()方法和call()方法能夠擴(kuò)充函數(shù)運(yùn)行的作用域,并且對(duì)象不需要與方法有任何耦合關(guān)系。

 

高程中兩個(gè)方法結(jié)合使用得出最值的例子:

var values = [1,2,3,4,5,6,7,8];

var max = Math.max.apply(Math,values);

 

Math.min(...args)

JavaScript中的新特性,擴(kuò)展語(yǔ)法( spread syntax),在對(duì)象前加上...的前綴,即可遍歷對(duì)象。

詳細(xì)可參考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator

 


 基礎(chǔ)練習(xí)(2)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

我的解答為:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

function removeSmallest(numbers) {  var lowest = Math.min.apply(Math,numbers);  var index = numbers.indexOf(lowest);
  numbers.splice(index,1);  return numbers;
}

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

較優(yōu)解答為:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

function removeSmallest(numbers) {  if(!numbers)return [];  var min=Math.min.apply(null,numbers);
  numbers.splice(numbers.indexOf(min),1);  return numbers;
}

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

分析:

思路都是使用Math.min.apply()方法求出最小值,再使用indexOf()方法求出該最小值在數(shù)組中的索引值,最后通過(guò)splice()方法,通過(guò)設(shè)置索引值和刪除的項(xiàng)數(shù)來(lái)刪除該最小值。不同的一點(diǎn)是,在執(zhí)行這一些列的操作前,先判斷數(shù)組是否為空,若為空則直接返回一個(gè)空數(shù)組。

筆記:

indexOf()方法返回要查找的項(xiàng)在數(shù)組中的位置,或者在沒有找到的情況下返回-1,接收兩個(gè)參數(shù):要查找的項(xiàng)和表示查找起點(diǎn)位置的索引(可選)。indexOf()方法表示從數(shù)組開頭開始向后查找,而lastindexOf()方法則從數(shù)組的末尾開始向前查找。

 

splice()方法的主要用途是想數(shù)組的中部插入項(xiàng),但使用該方法的方式有三種,分別為刪除、插入和替換。splice()方法始終返回一個(gè)數(shù)組,該數(shù)組中包含從原始數(shù)組中刪除的項(xiàng),若沒有刪除項(xiàng)則返回一個(gè)空數(shù)組。該方法會(huì)改變?cè)瓟?shù)組。三個(gè)使用方式的介紹如下:

刪除:可以刪除任意數(shù)量的值,指定兩個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。

插入:可以向指定位置插入任意數(shù)量的項(xiàng),需要提供三個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)(一般為0)和要插入的項(xiàng)。

替換:可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),需指定三個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)。

 


 基礎(chǔ)練習(xí)(3)

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 我的解答為:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

function squareDigits(num) {  var arr = num.toString().split("");  var newarr = arr.map(function(item,index,array) {    return Math.pow(item,2);
  });  var newnum = Number(newarr.join(""));  return newnum;
}

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

較優(yōu)解答為:

function squareDigits(num){  return Number((' ' + num).split('').map(function (val) { return val * val;}).join(' '));
}

分析:

相比之下,較優(yōu)解一般喜歡使用一條語(yǔ)句得出答案,此外使用的方法都是相類似的。其中將數(shù)值型數(shù)據(jù)轉(zhuǎn)為字符型數(shù)據(jù)時(shí),他使用的是弱類型轉(zhuǎn)換。而后在計(jì)算平方時(shí),使用的方法是直接相乘,我覺得不利于日后的代碼修改的,比如說(shuō)改為任意次方?,所以我覺得使用Math.pow()方法會(huì)比較好一些。

筆記:

split()方法可以基于指定的分隔符將一個(gè)字符串分割成多個(gè)子字符串,并將結(jié)果放在一個(gè)數(shù)組中。分隔符可以是字符串也可是一個(gè)RegExp對(duì)象??山邮湛蛇x的第二個(gè)參數(shù),用于指定數(shù)組的大小,以便確保返回的數(shù)組不會(huì)超過(guò)既定大小。

 

map()方法是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組,該數(shù)組的每一項(xiàng)都是在原始數(shù)組中的對(duì)應(yīng)項(xiàng)上運(yùn)行傳入函數(shù)的結(jié)果。相似的迭代方法還有every()、filter()、forEach()和some()。

 

Math.pow()方法,接收兩個(gè)參數(shù):num和power,返回num的power次冪。

 

join()方法可以使用不同的分隔符來(lái)構(gòu)建字符串,只接收一個(gè)參數(shù),用作分隔符的字符串,后返回包含所有數(shù)組向的字符串。若不給join()方法傳入任何值,或傳入undefined,則使用逗號(hào)作為分隔符。

 


今日總結(jié):

之前也有在FreeCodeCamp里練習(xí),與Codewars不同的是FreeCodeCamp比較基礎(chǔ),做練習(xí)的時(shí)候有相應(yīng)的方法提示,不需要思考就可以根據(jù)所給的方法進(jìn)行測(cè)試,所以僅僅知道這些方法的存在而在用的時(shí)候很難想起來(lái)噢原來(lái)可以這樣用或者是這個(gè)方法具體是怎么用。而在Codewars完全是只有題目,靠自己的思考解答,而且解答以后可以看到其他人的比較好的答案。為了解答題目的過(guò)程,翻書網(wǎng)上找資料,最后一點(diǎn)一點(diǎn)從錯(cuò)誤到正確,還是蠻有成就感的。通過(guò)比較自己和被人的答案也可以知道怎么解答會(huì)更好一些。最后再把方法總結(jié)一遍,也就能記住了。

http://www.cnblogs.com/omoc/p/7069128.html