方法1:スルーセット
// 借助Set实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];
const unique = [...new Set(arr)]
console.log(unique); // [2,3,5,6,8,9]
方法2:オブジェクトを介して
まず、重複排除する配列の各要素をオブジェクトのキーと値と等しくします。すでに存在する場合は、スプライスを使用して配列を削除します。このとき、添え字の変更に注意する必要があります。
// 通过对象实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];
const obj = {
};
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
if (obj[item]) {
arr.splice(i,1);
i--;
} else {
obj[item] = item
}
}
console.log(arr); // [2,3,5,6,8,9]
方法3:indexOfと-1の関係を使用してトラバースします
// 利用indexOf和-1的关系实现数组去重
const arr = [2,3,5,6,8,6,8,2,9];
const res = [];
arr.forEach(item => {
if (res.indexOf(item) === -1) {
res.push(item);
}
})
console.log(res); // [2,3,5,6,8,9]
方法4:filterとindexOfの関係を使用する
// 利用filter和indexOf结合
const arr = [2,3,5,6,8,6,8,2,9];
const unique = arr.filter((item,index) => {
return arr.indexOf(item) === index
})
console.log(unique); // [2,3,5,6,8,9]
方法5:並べ替え+スプライスを使用する
// 利用sort + splice
const arr = [2,3,5,6,8,6,8,2,9];
arr.sort((next,pre) => next - pre);
for (let i = 0;i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
arr.splice(i,1);
i--;
}
}
console.log(arr); // [2,3,5,6,8,9]
方法6:マップの助けを借りて
// 借助Map
const arr = [2,3,5,6,8,6,8,2,9];
const map = new Map();
const unique = [];
for (let v of arr) {
if (!map.has(v)) {
map.set(v,true);
unique.push(v)
}
}
console.log(unique); //[2,3,5,6,8,9]
方法7:reduce+インクルードの助けを借りて
// 借助reduce + includes
const arr = [2,3,5,6,8,6,8,2,9];
const unique = arr.reduce((pre,cur) => {
return pre.includes(cur) ? pre : [...pre,cur]
},[])
console.log(unique); // [2,3,5,6,8,9]
JSON.stringifyを使用した複雑なデータ型の配列重複排除
// 复杂数据类型借助 JSON.stringify
const arr = [2,3,5,6,8,6,8,[7],[7],2,9];
const unique = [];
arr.forEach(item => {
let flag = false;
unique.forEach(item1 => {
if (JSON.stringify(item1) === JSON.stringify(item)) {
flag = true;
}
})
if (!flag) {
unique.push(item);
}
})
console.log(unique); // [2,3,5,6,8,[7],9]