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


下內容屬於個人原創,轉載請注明出處,非常感謝!

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

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

 

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

恭喜你,找對地方了,在我這里就是一個字有!,但支持到IE9以上標准模式的瀏覽器(IE9、IE10、IE11等這些版本的企業模式不支持),其他的Chrome、火狐等瀏覽器就不要去考慮了,因為肯定支持的

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

 

 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的面板):

字符串類型的去重

  

數組類型的去重:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM