狀況情境
有以下陣列,試著取出 重複/不重複 字串與數值
1
| const array = [1, 2, 'a', 3, 1, 'b', 'a'];
|
filter() 方法
搭配 indexOf()
方法會回傳給定元素於陣列中第一個
被找到之索引,若不存在於陣列中則回傳 -1。
1 2 3 4 5
| const array = [1, 2, 'a', 3, 1, 'b', 'a']; const result = array.filter((element, index, arr) => arr.indexOf(element) === index); const repeat = array.filter((element, index, arr) => arr.indexOf(element) !== index); console.log(result); console.log(repeat);
|
Set()
Set 物件可讓儲存任何類型的唯一值(unique),並且有 add
、has
等方法使用
1 2 3 4 5 6 7 8 9 10 11 12
| const array = [1, 2, 'a', 3, 1, 'b', 'a']; const result = new Set(); const repeat = new Set(); array.forEach((item) => { if (result.has(item)) { repeat.add(item); } else { result.add(item); } }); console.log(result); console.log(repeat);
|
Object + Object.keys()
1 2 3 4 5 6
| const array = [1, 2, 'a', 3, 1, 'b', 'a']; const result = {}; array.forEach((item) => { result[item] = result[item] ? result[item] + 1 : 1; }); console.log(Object.keys(result));
|
reduce()
1 2 3 4 5 6 7
| const array = [1, 2, 'a', 3, 1, 'b', 'a']; const result = array.reduce((obj, item) => { const object = { ...obj }; object[item] = 1; return object; }, {}); console.log(Object.keys(result));
|
Set + Spread
1 2 3 4
| const array = [1, 2, 'a', 3, 1, 'b', 'a'];
const result = [...(new Set(array))]; console.log(result);
|
參考資料
Set
Array.prototype.indexOf()
JavaScript取出陣列重複/不重複值的方法