Javascript常見面試題-判斷數組中是否有重複元素
前言
今天這篇文章我們一起來看看,一道常見的關於Javascript的面試題,如何判斷一個數組中是否有重複的元素?
這篇文章的代碼我已經放到了自己的github上,感興趣的同學可以看看。
https://github.com/zhouxiongking/article-pages/blob/master/articles/isDuplicateEleInArr/isDuplicateEleInArr.js
方法1
主要思想:
對於任意的數組,首先將其用特定的分隔符轉化字符串,然後在末尾添加一個相同的分隔符。
然後對數組元素進行遍歷,將得到的字符串中元素對應的字符串用空串代替。
最後判斷,如果在剩下的字符串中還能匹配出元素對應的字符串,則代表數組中有相同的元素。
根據上述的思想,我們得到以下的代碼。
通過以下測試,證明了上述方法的正確性。
方法2
主要思想:
藉助Array原生的sort方法,先將數組排好序
每個元素依次和後面的元素相比較,如果相同則表明數組中有相同的元素
根據以上的思想可以得出以下的代碼實現。
通過以下測試證明方法2的正確性。
方法3
主要思想:
創建一個對象,將數組中的每個值作為對象的鍵。
依次判斷對象的鍵是否已經存在,如果已經存在則表明數組有重複元素。
根據主要思想可以得到以下的代碼。
通過以下測試,證明方法3的正確性。
方法4
主要思想:
藉助Array原生的reduce方法,將數組元素做為一個對象的鍵,設定值為任意簡單值類型
判斷得到對象的key長度是否和數組長度相同,如果不相同則表明數組中有重複元素。
方法4和方法3其實主要思想是一樣的,都是利用對象鍵值對的唯一性,方法4相比於方法3代碼會更加簡潔。
通過以上思想得到以下方法代碼。
通過以下測試,證明方法4的正確性。
說明
上述的方法測試代碼中只是假定數組元素為簡單類型,其實數組元素也可以為對象類型,如果是對象類型的話,一般是比較對象的某個屬性,此時就同上述方法一樣。
結束語
今天這篇文章中講到的四種判斷數組中是否有重複元素的方法,大家都學會了嗎?或者大家有其他方法也歡迎交流。