const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];
想要的结果
=> [1, '1', 17, true, false, 'true', 'a', {}, {}]
最先想到的就是哈希表……
方式一:哈希表
但是这里我在遍历哈希表map
的时候出现了问题 —> 查看
let map = new Map();
for (let i = 0, len = arr.length; i < len; i++) {
let x = arr[i];
if (!map.has(x)) {
map.set(x, 1);
}
}
const res2 = [];
map.forEach((key, values) => {
res2.push(values);
})
方式二: set转换
let res = new Set(arr); // set 类型;
console.log(Array.from(res));
方式三: 数组api — indexOf()
判断结果数组中有没有答案,没有的话压进结果数组中去。include()
和indexOf()
实现几乎一致。
function unique2(arr) {
const res2 = [];
const len = arr.length;
for (let i = 0; i < len; i++) {
let x = arr[i];
if (res2.indexOf(x) == -1) res2.push(x);
}
return res2;
}
方式四: 数组api – filter()
function unique4(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) === index;
})
}