需求:
原字符串:abcdabecd
去重后字符串:abcde
JS字符串去重,一個簡單需求,網上找案例發現都是一大堆代碼,對於強迫症的我 實再無法忍受,於是自己手動寫出一段代碼,完美解決該問題。
代碼如下:
[].filter.call(str,(s,i,o)=>o.indexOf(s)==i).join('');
里面的str直接替換成字符串或字符串變量即可。如:
var rs = [].filter.call("abcdabecd",(s,i,o)=>o.indexOf(s)==i).join('');
得到的rs即為 abcde
*以上為es6的函數寫法,如瀏覽器不支持這種寫法可替換為function形式:
[].filter.call(str,function(s,i,o){return o.indexOf(s)==i;}).join('');
思路分析:
核心思想為使用數組的filter方法過濾掉除第一次出現的字符以外其它字符,然后join連接字符串,s、i、o 3個參數分別為:當前字符、當前字符索引、原字符串
此方法妙處在於利用js的call方法改變宿主,使用字符串調用數組中的過濾方法(字符串無此方法),減少了復雜的循環步驟;並且此方法沒有使用多余的變量減少內存開支;巧妙的利用indexOf取出字符串中第一次出現的字符(非第一次出現的字符被過濾掉)。因而實現此需求。