function unique(array) {
let result = []
for(var i = 0; i < array.length; i++){
for(var j = 0; j < result.length; j ++){
if (array[i] === result[j]) {
// 若是result中有和array[i]相同的項,直接跳出循環再也不繼續,而且j不會自增
// j 不自增,就意味着,j不會等於result.length,下面的if語句就不會執行
break
}
}
// 若是result中沒有與array[i]相同的項,那麼第二層for循環完畢以後,j === result.length
// 並將這輪循環的 array[i] push 到result中
if (j === result.length) {
result.push(array[i])
}
}
return result
}
複製代碼
function unique(array) {
var res = []
for (var i = 0; i < array.length; i ++){
if (res.indexOf(array[i]) === -1) {
res.push(array[i])
}
}
return res
}
複製代碼
function unique(array) {
return array.filter((item, index, self) => self.indexOf(item) === index)
// [1,1,1,1].indexOf(1)返回的是第一個'1'的下標0,不會再查詢第一個 '1' 後面的元素了。
// 在這裏,self.indexOf(item)每次返回的都是下標0,除了第一個元素(index = 0),以後等式都不成立了。
}
複製代碼
var obj = {
1: 'number1',
'1': 'string1'
}
複製代碼
function unique(array) {
var obj = {}
return array.filter((item, index, self) => {
// 若是對象中沒有找到 typeof item + item, 則向其添加一個 key: typeof item + item,value設置爲true,表示將item過濾出來。
// value能夠隨便設置,除了0,'',undefined等等這些會轉化成false值的值
return obj.hasOwnProperty(typeof item + item) ? false : obj[typeof item + item] = true
})
}
複製代碼
Set 結構的實例有如下屬性。數組
Set 實例的方法分爲兩大類:操做方法(用於操做數據)和遍歷方法(用於遍歷成員)。bash
var uniqueArr = new Set([1,2,3,1,'1','a','a'])
>>>uniqueArr
<<< Set(5) {1, 2, 3, "1", "a"}
>>> uniqueArr instanceof Array
<<< false
複製代碼
function unique(array) {
return Array.from(new Set(array))
}
複製代碼
function unique(array) {
return [...new Set(array)]
}
// 咱們能夠簡化一下這個函數
var unique = (array) => [...new Set(array)]
複製代碼
>>> NaN === NaN
<<< false
>>> NaN == NaN
<<< false
>>> {} == {}
<<< false
>>> {} === {}
<<< false
>>> undefined == undefined
<<< true
>>> undefined === undefined
<<< true
>>> null == null
<<< true
>>> null === null
<<< true
複製代碼