js通用刪除數組中重複的值和刪除字符串中重複的字符

下內容屬於我的原創,轉載請註明出處,很是感謝!前端

刪除數組中重複的值或者刪除字符串重複的字符,是咱們前端開發人員碰到不少這樣的場景。還有求職者在被面試時也會碰到這樣的問題!好比:問刪除字符串重複的字符,保留其中的一個,並打印出重複的次數。面試

其實這種問題或者場景,要是針對刪除字符串重複的字符,這個能夠用正則表達式實現,那麼這個須要Web前端開發人員熟悉正則表達式了,要是針對數組,有的人就會想到,咱們能夠用jion('')轉成字符串能夠用了。可是這種數組要知足這樣的要求才能夠,如:['a','b','c','a','b'],這種是能夠的!可是這樣的數組數據,幾乎是可能這樣完美的,尤爲是數據的數組。好比:[1,123,3,55,54,56,3,123]或['a','ab','a'],大多數都是這樣的。這樣類型的數組,就不能用正則來弄了!正則表達式

 

看了上面的問題,確定有人會想,能不能寫一個通用的,既能刪除字符串中重複的字符,也能刪除數組中重複的值呢?數組

恭喜你,找對地方了,在我這裏就是一個字有!,但支持到IE9以上標準模式的瀏覽器(IE九、IE十、IE11等這些版本的企業模式不支持),其餘的Chrome、火狐等瀏覽器就不要去考慮了,由於確定支持的
瀏覽器

代碼以下(如下代碼用ES6格式寫的):ide

 

 1 let getRemoveRepeat = (obj, flag) => {
 2             if (typeof obj === 'undefined') return '傳入\"abcab\"或\[\"a\"\,\"b\"\,\"a\"\]';
 3             let str, _map = {}, arr = [], mod = 0;
 4             flag = typeof flag === 'undefined' ? false : flag;
 5             if (obj.constructor === Array) str = obj;
 6             else if (obj.constructor === String) {
 7                 mod = 1;
 8                 str = obj.split('');
 9             }
10             str.map(x => {
11                 // 當flag是true,意思就是不區分大小寫 好比A和a都要只保留一個,默認區分的
12                 if(flag && typeof x ==='string') x =x.toLocaleLowerCase(); 
13                 if (!_map[x]) {
14                     _map[x] = 1; //次數爲1
15                     arr.push(x); 
16                 }
17                 else _map[x] = _map[x] + 1;
18             });
19             console.log(_map); //打印出每一個值的重複次數
20             return mod ? arr.join('') : arr;
21         }

 

下面是轉換成ES5的代碼(IE9以上包括IE9在內的標準模式可能夠):測試

 1 'use strict';
 2 var getRemoveRepeat = function getRemoveRepeat(obj, flag) {
 3     if (typeof obj === 'undefined') return '傳入\"abcab\"或\[\"a\"\,\"b\"\,\"a\"\]';
 4     var str = void 0,
 5         _map = {},
 6         arr = [],
 7         mod = 0;
 8     flag = typeof flag === 'undefined' ? false : flag;
 9     if (obj.constructor === Array) str = obj;else if (obj.constructor === String) {
10         mod = 1;
11         str = obj.split('');
12     }
13     str.map(function (x) {
14         // 當flag是true,意思就是不區分大小寫 好比A和a都要只保留一個,默認區分的
15         if (flag && typeof x === 'string') x = x.toLocaleLowerCase();
16         if (!_map[x]) {
17             _map[x] = 1; //次數爲1
18             arr.push(x);
19         } else _map[x] = _map[x] + 1;
20     });
21     console.log(_map); //打印出每一個值的重複次數
22     return mod ? arr.join('') : arr;
23 };
View Code

下面是測試用例的截圖(基於Chrome瀏覽的Console的面板):spa

字符串類型的去重3d

  

數組類型的去重:code

  

相關文章
相關標籤/搜索