javascript常見方法彙總之一——數組字符串相關

(轉載至慕課網)javascript

原文連接:https://www.imooc.com/article/46933html

github地址:https://github.com/dorseysen/notes-about-javascript-methods/blob/master/about-string-and-array.htmljava

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Title</title>
  6 </head>
  7 <body>
  8 <script>
  9     //數組字符串操做的常見方法:
 10     //此次呢先這麼多,基本常見的都在這了
 11     /**
 12      * 一、split : 將字符串轉化爲數組           (單詞譯爲:使分離)
 13      * 二、join : 數組重組爲字符串              (單詞譯爲:鏈接)
 14      * 三、reserve : 數組裏全部元素順序倒置     (單詞譯爲:儲備)
 15      * 四、slice :數組或字符串片段截取          (單詞譯爲:切片)
 16      * 五、splice : 數組增刪元素                (單詞譯爲:拼接)
 17      * 六、sort : 數組元素排序                  (單詞譯爲:分類)
 18      * 七、concat :用於鏈接兩個或多個數組  (單詞譯爲:合併多個數組或字符串,聯結)
 19      * 八、shift :刪除原數組中的第一項,並返回刪除元素的值
 20      * 九、unshift : 將參數添加到原數組開頭      (shift和unshift這兩個其實比較雞肋,且存在着低版本如ie6返回值不許確問題)
 21      * 十、push : 比較常見的方法,用於在數組末尾添加元素   (單詞譯爲:堆棧)
 22      * */
 23     //一、split(reg);  //把字符串轉換爲數組,傳入的參數是一個匹配單元,字符串會根據這個匹配單元把字符串切割成一份份並造成一個數組
 24     let str0 = "my name is dorsey!";
 25     console.log(str0.split(''));// ['m','y',' ','n','a','m','e',' ','i','s',' ','d','o','r','s','e','y','!'];注意的是空格也是字符
 26     console.log(str0.split(' ')); //["my","name","is","dorsey!"]
 27     //二、join(reg);//相對於上面的拆,這裏是重組,即把數組從新鏈接成字符串,原理一致,參數也是一個匹配單元,需注意的是join是數組的一個屬性
 28     let arr0 = ["my","name","is","dorsey!"];
 29     console.log(arr0.join('-')); //傳入「-」鏈接符號 my-name-is-dorsey!
 30     console.log(arr0.join(' ')); //傳入「 」空格鏈接符 my name is dorsey! 空格也是符號,空格災難地獄也是由於程序員的粗心致使的
 31     //三、reverse(); 數組的一個對象,做用是將數組中的元素倒置
 32     let arr1 = ["my","name","is","dorsey!"];
 33     console.log(arr1.reverse());["dorsey!","is","name","my"]; //倒過來
 34     // 1-2-3上面綜合小案例
 35     let str1 = "我是一名中國人!";
 36     console.log(str1.split('').reverse().join(''));
 37     //四、slice(start,end); 字符串或數組切取,截取
 38     let str2 = "my name is dorsey!";
 39     console.log(str2.slice(3,7)); //截取這段字符串中的第4~第7 即4,5,6,7這幾個字符
 40     let arr2 = ["my","name","is","dorsey!"];
 41     console.log(arr2.slice(1, 3)); //也能夠用於數組,切取是數組的第2~3個元素
 42     //五、splice(index,howmany,item1,item2...):數組增刪元素,後面的item是要添加的項目,並從index位置開始添加,index是從哪開始刪除,howmany是要刪除的個數
 43     let str3 = ["my","name","is","dorsey!"];
 44     str3.splice(2,2); //從str3[2]開始刪除,刪除2個,即"is" 和 "dorsey!"
 45     console.log(str3);//["my","name"]
 46     let arr3 = ["my","name","is","dorsey!"];
 47     arr3.splice(2,0,2);//只添加項目就設置howmany值爲零,這樣它就刪除0個,只添加
 48     console.log(arr3);//["my","name",2,"is","dorsey!"];
 49     //六、sort():對數組元素進行排序,注意這裏的是以ASCLL碼錶作排序,且比對的是字符串的形式,好比415跟6,415會讓4跟6比對,4在前,因此415比6前
 50     let arr4 = [1,2,6,3,'b','baoh',457,712,41,62,"a","A",''];
 51     //好比這裏的A是排在65,a是排在97,而0~9的ascll碼序號則是是從48開始到57結束,因此數字排在字母以前,而之因此是根據這個表是由於C語言而來的
 52     arr4.sort();
 53     console.log(arr4);//[1, 2, 3, 312, 41, 457, 6, 62, "A", "a"]
 54     //準確的說是Unicode碼,即在ascll碼的基礎上拓展了一些新字符,好比漢字的二進制存儲,這裏能夠不用管,不知道爲何A排在a以前的能夠去查一查
 55     //這樣的sort雖然具有拓展性和通用性,但顯然不是咱們想要的,好比個人數組只有數字,我只要數字從小到大排序就好,怎麼作呢?兩個字,傳參數
 56     let arr5 = [1,25,10,7,100,2560,13,-3281,-23,0];
 57     function mun1(a,b){
 58       return a-b;
 59     }
 60     console.log(arr5.sort(mun1));
 61     //七、concat():合併多個數組,既能夠幾個數組來,也能夠直接傳一個字符串,會被當成數組的一個
 62     let arr6 = ["my","name","is","dorsey!"];
 63     let arr7 = ["I'm","from","China.",["你好啊","hello"]]; //這裏數組裏放數組我只是須要讓你直觀的確認concat實際上只處理了兩層,但夠了。
 64     console.log(arr6.concat(arr7));     //["my", "name", "is", "dorsey!", "I'm", "from", "China."];
 65     console.log(arr6.concat('dahids')); //["my", "name", "is", "dorsey!", "dahids"]
 66     //八、shift():刪除數組第一項的值,返回刪除元素的值
 67     let arr8 = ["my","name","is","dorsey!"];
 68     console.log(arr8.shift()); //my
 69     console.log(arr8); //["name", "is", "dorsey!"]
 70     //九、unshift():將參數添加到原數組開頭,且返回新數組的長度,注意的是部分瀏覽器返回結果有誤,如ie6還有firefox2.0
 71     let arr9 = ["my","name","is","dorsey!"];
 72     arr9.unshift('呵呵!', 'hello');
 73     console.log(arr9);
 74     //十、push():將參數添加到原數組末尾,比較經常使用
 75     let arr10 = ["my","name","is","dorsey!"];
 76     arr10.push('呵呵!', 'hello');
 77     console.log(arr10);
 78     //一、split函數內部實現,join函數實現其實是差很少的
 79     //實際上它的內部應該是這樣實現的:爲了簡化函數及方便理解,而split是做爲一個屬性存在於String這個對象裏,
 80     //這裏咱只是把要切成數組的字符串當參數傳進來,爲了方便直觀我就不封在數組對象裏了,同樣的其實
 81     //另外呢,因爲我也沒看過底層源碼是怎樣的,實際上確定有更高級巧妙的方式,特別這個while()函數最好少用,不過總體思路應該差很少,下同
 82     let Split = function(string,str){
 83       let rule = new RegExp(str),
 84           accept = [], //
 85           str0 = string; //爲了避免影響原字符串,緩存一下
 86       //這裏的切取通常得是用C/C++的for循環一個個字符去遍歷,這裏直接用了slice,只是大體看看裏面是怎麼走的
 87       while(1){
 88         if(rule.test(str0) && str !== ''){
 89           accept.push(str0.slice(0,str0.indexOf(str)));
 90           str0 = str0.slice((str0.indexOf(str)+str.length),str0.length);
 91         }
 92         else {
 93           if(str === '' ) {
 94             for(let i = 0; i < str0.length; i ++ ){
 95               accept.push(str0[i]);
 96             }
 97             break;
 98           }
 99           else{
100             accept.push(str0);break;
101           }
102         }
103       }
104       return accept;
105     }
106     console.log(Split(str0,''));
107     console.log(str0.split(''));
108     //三、函數reverse內部實現,實際上應該是有更好的辦法的,這裏咱們瞭解下原理便可
109     let Reverse = function(arr){
110       let accept = [];
111       for(let i = 0;i < arr.length;i++){
112         accept[i] = arr[arr.length-1-i];
113       }
114       return accept;
115     }
116     console.log(Reverse(arr2));
117     console.log(arr2.reverse());
118     //四、slice函數內部實現:爲了方便直觀我就不封在數組或字符串對象裏了,同樣的其實
119     let Slice = function(start,end,val){
120         let accept;
121         if(typeof(val) === "string"){
122             accept = '';
123             for(let i = start;i < (end > val.length ? val.length : end ); i++){
124               accept += val[i];
125             }
126         }
127         else {
128             let j = 0;
129             accept = [];
130             for(let i = start;i < (end > val.length ? val.length : end ); i++){
131               accept[j] = val[i];
132               j++;
133             }
134         }
135         return accept;
136     }
137     console.log(Slice(3, 100, str2));
138     console.log(str2.slice(3, 100));
139     console.log(Slice(2, 8, arr2))
140     console.log(arr2.slice(2, 8));
141     //六、sort方法實現:爲了方便直觀我就不封在數組對象裏了,同樣的其實,從它的實際應用來看應該內部邏輯很複雜,爲了簡化,咱們
142     //只考慮了純數字的排序,也不考慮用函數做爲參數來傳參,咱考慮正序和逆序便可
143     //注意!注意!注意!這裏的排序只對數字有效
144     let Sort = function(arr,order){ //order只有StoL和LtoS,StoL表明正序(小-大),LtoS表明倒序(大-小)
145         let accept = arr,mid;
146       if(accept.length > 1){
147           for(let i = 1; i < accept.length; i ++ ){
148             for(let j = 0; j < i; j ++ ){
149               if((accept[i] < accept[j] && order === 'StoL') || (accept[i] > accept[j] && order === 'LtoS')){ //知足條件則交換位置
150                 mid = accept[i]; //這裏若是是純number類型的,能夠不用新增寄存器(變量mid)
151                 accept[i] = accept[j];
152                 accept[j] = mid; // mid中間值
153               }
154             }
155           }
156         }
157         return accept;
158     }
159     // //基本sort排序
160     let sortTest = [1,25,10,7,100,2560,13,-3281,-23,0];
161     console.log(Sort(sortTest,'LtoS'));
162     //七、concat方法實現:爲了方便直觀我就不封在數組對象裏了,同樣的其實
163     let Concat = function(){
164         let accept = [];
165         for(let i = 0; i < arguments.length; i ++){
166            if(typeof (arguments[i]) !== "string"){
167              for(let j = 0; j < arguments[i].length; j++){
168                accept.push(arguments[i][j]);
169              }
170            }
171            else {
172              accept.push(arguments[i]);
173            }
174         }
175         return accept;
176     }
177     console.log(Concat(arr6, 'dasoai','dsaoidha','我去你妹的')); //二者輸出結果一致
178     console.log(arr6.concat('dasoai','dsaoidha','我去你妹的')); //["my", "name", "is", "dorsey!", "dasoai", "dsaoidha", "我去你妹的"]
179     //八、shift方法實現 :刪除數組第一個元素
180     let Shift = function(arr){
181       let firstVal = arr[0];
182         for(let i = 0; i < arr.length-1; i++){
183           arr[i] = arr[i + 1];
184         }
185         arr.length -=1;
186         return firstVal;
187     }
188     let shiftTest = [1,25,10,7,100,2560,13,-3281,-23,0];
189     console.log(Shift(shiftTest)); //返回第一個元素
190     console.log(shiftTest); //刪除了第一個元素的數組
191     //九、unshift方法實現 : 將參數添加到數組開頭
192     let Unshift = function(arr){
193       arr.length += arguments.length-1;
194       for(let i = arr.length;i > arguments.length-1; i --){
195         arr[i-1] = arr[i-arguments.length];
196       }
197       for(let i = 0 ; i < arguments.length-1 ; i ++){
198         arr[i] = arguments[i+1];
199       }
200       return arr.length;
201     }
202     let unshiftTest = [1,25,10,7,100,2560,13,-3281,-23,0];
203     console.log(Unshift(unshiftTest,"hello","world")); //返回新數組長度12
204     console.log(unshiftTest); //返回新數組
205     //十、push方法實現 : 將參數添加到數組末尾,與unshift的原理實質上是一致的
206     let Push = function(arr){
207       arr.length += arguments.length - 1;
208       for(let i = 1; i < arguments.length ; i ++){
209           arr[arr.length - arguments.length + i] = arguments[i];
210       }
211       return arr.length;
212     }
213     let pushTest = [1,25,10,7,100,2560,13,-3281,-23,0];
214     console.log(Push(pushTest,"hello","world")); //返回新數組長度12
215     console.log(pushTest); //返回新數組
216 </script>
217 </body>
218 </html>
相關文章
相關標籤/搜索