3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
歡迎和大家一起來討論~ 基礎練習(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提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦