search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

JavaScript練習筆記整理·3 - 6.25

歡迎和大家一起來討論~ 基礎練習(1):

我的解答為:

  • function array_diff(a, b) {
  • if (b == "") return a;
  • return a.filter(function(item,index,array) {
  • var flag = false;
  • for(var i=0;i<b.length;i++) {
  • if(item !== b[i]) flag = true;
  • }
  • return flag;
  • });
  • }

複製代碼

較優解答為:

  • function array_diff(a, b) {
  • return a.filter(function(x) { return <strong>b.indexOf(x) == -1</strong><strong>;</strong> });
  • }

複製代碼

分析:

對數組a使用filter方法,迭代判斷數組a中的值是否存在於數組b中。當x的值,即數組a的值不能在數組b中找到時,b.indexOf方法將返回-1。數組的filter方法是指對數組中的每一項運行給定函數,返回該函數會返回true的項組成的的數組。 我的思路就稍微想得複雜了,對數組進行迭代的方法filter是想到了,卻沒有好好地利用起來,函數內的判斷方法不夠簡潔,也沒有想到可以使用indexOf方法進行判斷。

這篇文章分享之前我還是要推薦下我自己的前端群:657*137*906,不管你是小白還是大牛,小編我都挺歡迎,不定期分享乾貨,包括我自己整理的一份2017最新的前端資料和零基礎入門教程,歡迎初學和進階中的小夥伴。。

筆記:

filter方法,是指對數組中的每一項運行給定函數,返回該函數會返回true的項組成的的數組。利用指定的函數確定是否在返回的數組中包含某一項。 使用例子: var numbers = [1,2,3,4,5,4,3,2,1]; var filterResult = numbers.filter(function(item,index,array) { return (item>2); }); alter(filterResult); //[3,4,5,4,3] 數組的迭代方法真的很常用的,用於對某個數組循環某一操作。這些迭代方法要比for循環語句簡單很多,要記住! 共有五個迭代方法:every、filter、forEach、map、some。基礎練習(2): 我的解答為:

  • var gimme = function (inputArray) {
  • var newArray = ;
  • for(var i=0;i<inputArray.length;i++) {
  • newArray[i] = inputArray[i];
  • }
  • newArray.sort(function(a,b) {
  • if(a < b) {
  • return -1;
  • } else if (a> b) {
  • return 1;
  • } else {
  • return 0;
  • }
  • });
  • return inputArray.indexOf(newArray[1]);
  • };

複製代碼

較優解答為:

  • function gimme(a) {
  • return a.indexOf(a.concat.sort(function(a, b) { return a - b })[1])
  • }

複製代碼

分析:

在較優解答中,對原數組使用了concat方法,該方法可以將原數組複製並創建一個新數組。接著對新數組進行排序,並對於中間值求得索引值。 我的思路和最優解是一樣的,而實現方法還是稚嫩了一些。對於創建新數組不知道可以使用concat方法進行快速地複製,也說明對基礎知識的熟悉程度不夠了。另外排序方法中,原來可以直接使用「return a-b」,我的方法就顯得很累贅了。

筆記:

concat方法可基於當前數組中的所有項創建一個新數組。該方法會先創建當前數組的一個副本,將接收到的參數添加到這個副本的末尾,最後返回新構建的數組。在沒有給concat方法傳遞參數的情況下,它只是複製。若傳遞給concat方法的是一個或多個數組,則該方法會將這些數組中的每一項都添加到結果數組中。若傳遞值不是數組,則添加到結果數組的末尾。 使用例子: var colors = ["red","green","blue"]; var colors = colors.concat("yellow",["black","brown"]); alert(colors); // red,green,blue alert(colors); // red,green,blue,yellow,black,brown 重排序方法:使用sort方法可以進行排序,但仍可能會出現一些問題,因此使用比較函數,可以避免這個問題。 對於大多數數據類型可使用,只需要將其作為參數傳遞給sort方法即可: function compare(value1,value2) { if(value1 < value2) { return -1; } else if (value1> value2) { return 1; } else { returm 0; } } 對於數值型或其他valueOf方法會返回數值類型的對象類型,可以使用更簡單的比較函數: function compare(value1,value2) { return value2 - value1; }基礎練習(3):

我的解答為:

  • function minMax(arr){
  • var newarr = ;
  • newarr.push(Math.min.apply(Math,arr));
  • newarr.push(Math.max.apply(Math,arr));
  • return newarr;
  • }

複製代碼

較優解答為:

  • function minMax(arr){
  • return [Math.min(...arr), Math.max(...arr)];
  • }

複製代碼

分析:

這道題目就很簡單了,較優解答中的擴展語法( spread syntax)也在練習一中提及了。我的寫法還是太謹慎了,是不是應該大膽一些呢?基礎練習(4):

我的解答為:

  • function XO(str) {
  • var str = str.toLowerCase;
  • var countx = 0;
  • var counto = 0;
  • for(var i=0;i<str.length;i++) {
  • if(str[i] === "x") {
  • countx++;
  • }
  • if(str[i] === "o") {
  • counto++;
  • }
  • }
  • if(counto == countx) {
  • return true;
  • } else {
  • return false;
  • }
  • }

複製代碼

較優解答為:

  • function XO(str) {
  • var a = str.replace(/x/gi, ''),
  • b = str.replace(/o/gi, '');
  • return a.length === b.length;
  • }

複製代碼

分析:

較優解使用的是replace方法,結合正則表達式的使用,對原字元串str分別將x和o用空字元串替換得到a和b字元串,比較a和b字元串的長度,從而得到結果。我的解答方法呢,因為實在想不到可以使用什麼方法,所以用的最原始的方法,彷彿自己在做C語言的題目。 筆記: replace方法,該方法接受兩個參數,一個參數可以是一個RegExp對象或者一個字元串,第二個參數可以是一個字元串或者是一個函數。若第一個參數是字元串,指揮替換第一個子字元串。要想替換所有子字元串,是提供一個正則表達式,並且指定全局標誌。 使用例子: var text = "cat,bat,sat,fat"; var result = text.replace("at","ond"); alert(result); //"cond,bat,sat,fat" result = text.replace(/at/g,"ond"); alert(result); //"cond,bond,song,fond"總結: 今天的知識點主要是數組的迭代方法中的一種filter方法、數組操作方法中的concat方法以及字元串的replace方法。filter方法可用於使用函數判斷數組中各項的值中返回true值的結果所組成的數組。concat可以複製和創建新數組。而replace方法可以替換字元串中的一個或多個值。 從這三天的練習來看,對於數組的各種方法也逐漸使用得熟練起來了。但是其他類型的各種方法還是一種挑戰。而我的解答也要從比較冗餘的語句,寫出更為簡潔而有效的語句了。繼續加油吧!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦