原陣列
let data = [1,'a',2,'b',2,'a','c',3]
把重複的元素拿掉,讓重複的元素只出現在陣列一次
例如想要取出 : [1, 'a', 2, 'b', 'c', 3]
方式 1 => filter 與 indexOf
let result = data.filter((el, index) => {
return data.indexOf(el) === index
})
console.log(result)
indexOf 會回傳陣列中第一個被找到的元素 index,如果找不到回傳 -1。
index 為回傳目前 el 的 index。
例如當 el 為 第二次出現的 2 時,index 為 4, data.indexOf(2) 為 2,這樣 result 就不會篩選到。
方式 2 => Set
let dataSet = new Set(data)
console.log([...dataSet])
Set 會儲存不重複的值。
如果你直接 console.log(dataSet)
會得到 Set(6) { 1, 'a', 2, 'b', 'c', 3 }
,並不是陣列的形式。
所以必須使用 [...dataSet]
列出有重複過的元素陣列
原陣列
let data = [1,'a',2,'b',2,'a','c',3]
想要取出重複過的元素陣列 [2, 'a']
方式1 => filter, indexOf
let result = data.filter((el, index) => {
return data.indexOf(el) !== index
})
console.log(result)
跟上面找出不重複的方式差不多只不過 ===
改成 !==
方式2 => Set, forEach
let dataSet = new Set()
let result = []
data.forEach(el => {
dataSet.has(el)? result.push(el):dataSet.add(el)
})
console.log(result)
新建一個 Set,準備裝不重複的值。
使用 forEach ,找 data 裡面的每一個元素,如果 dataSet 沒有這個元素就新增一個到 dataSet;如果有,代表重複了,把它 push 到 result。
那如果想要列出沒有重過的元素呢
原陣列
let data = [1,'a',2,'b',2,'a','c',3]
想要取出沒有重複過的元素陣列 [1, 'b', 'c', 3]
方式1 indexOf, filter
let repeat = data.filter((el, index) => {
return data.indexOf(el) !== index
})
let result = data.filter(el => {
return repeat.indexOf(el) === -1
})
console.log(result)
方式2 includes, filter
let repeat = data.filter((el, index) => {
return data.indexOf(el) !== index
})
let result = data.filter(el => {
return !repeat.includes(el)
})
console.log(result)
以上是目前我想到的方式,如果日後有不錯的解法,會再慢慢更新上來!