国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

Javascript面試經典套路reduce函數查重

2024-05-06 16:36:09
字體:
來源:轉載
供稿:網友

今天在偶然間查看到了一段代碼,代碼使用了很短的篇幅完成了字符串統計相同字符次數這個經典面試題,其中用到了reduce這個方法,網上查了查,沒有查到什么有價值的東西,導致浪費了我一些時間才看懂,現將我的思路整理如下:

原代碼:

var arr="qweqrq"var info= arr.split('').reduce((a,b)=> (a[b]++ || (a[b]=1),a),{})console.log(info)

代碼思路是這樣的,先將字符串arr通過split方法切割成數組,然后使用reduce,這個方法干了什么呢,分為這幾步:

1.首先reduce會接收一個callback來對數組里的每一個元素執行,如果有第二個參數如上例:{}。,那么callback將會使用這個{}作為參數來和數組中的第一個元素一同傳入callback;

2.傳入參數之后,會進行一個與門短路操作,也可以叫默認值操作,當a[b]++成真,則返回a[b]。而這里的a為{},b為"q",很明顯a中并沒有b,執行a[b]=1,那么就會給a[b]賦值為1,后面是一個逗號表達式,所以會返回有了a[b]:1這樣屬性的a對象;

與門短路操作:如果第一個操作數的值為true,進行短路操作,直接產生第一個操作數的值。如果為false,則產生第二個操作數的值。

逗號表達式:逗號表達式的一般形式是:表達式1,表達式2,表達式3……表達式n。逗號表達式的求解過程是:先計算表達式1的值,再計算表達式2的值,……一直計算到表達式n的值。最后整個逗號表達式的值是表達式n的值。

3.之后要說下reduce函數,它可以將之前一次執行后返回的結果作為參數繼續和之后的元素一同傳入callback執行,相當于fn(fn(fn(fn(a,b),c),d),e),fn即為callback;

4.在本例中,因為有第二個參數{}傳入,所以callback執行了6次。相當于對數組中每一個元素都進行了錄入和查重操作,比如當callback運行到第四次,這時的a是{q:1,w:1,e:1},執行callback,a[b]即a['q']存在,執行a['q']++,a['q']值為2,以此類推,最后得到的就是一個以數組每個元素為屬性名,出現次數為屬性值的對象。

需要注意的是,reduce是es5推出的方法,ie8及以下都不兼容。

以上所述是小編給大家介紹的Javascript面試經典套路reduce函數查重,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广州市| 麻城市| 南雄市| 个旧市| 南丹县| 巧家县| 美姑县| 新蔡县| 恩施市| 台湾省| 大余县| 边坝县| 吕梁市| 即墨市| 辉县市| 奉贤区| 惠来县| 广州市| 郯城县| 绥中县| 偏关县| 惠东县| 扬州市| 九龙城区| 宜州市| 三江| 桦甸市| 潼南县| 获嘉县| 汶上县| 合阳县| 南皮县| 淄博市| 泰宁县| 扎鲁特旗| 鄂托克旗| 安多县| 山东省| 麟游县| 繁峙县| 买车|