数组去重是什么意思?
看一下这个数组:
var arr=[1,2,3,4,5,1,2,3,4,5,6];
很明显可以看出这个数组有相同的元素,数组去重就是将数组中有相同元素的部分去掉,那么该怎样实现呢?
法1: 利用ES6新增数据类型 Set 不包含重复元素的值的集合 Map 双列集合 键值对 与object的区别 object中的key只能是string类型 而Map是可以任意数据类型
function uniq1(array) {
// return [...new Set(array)]; // new Set(array) => 数组 [...数组] Array.from(set)
return [...new Set(array)];//Set数据结构转换成数组
}
function uniq2(array) {
return Array.from(new Set(array));//Set数据结构转换成数组 ES6数组的新增方法 Array.from() Array.of()
}
// console.log(uniq2(array))
法2: 利用 indexOf:
function uniq3(arry) {
var result = [];//临时数组 用来存放不包含重复元素的数组
for (var i = 0; i < arry.length; i++) {
if (result.indexOf(arry[i]) === -1) {
//如 result 中没有 arry[i],则添加到数组中
result.push(arry[i])
}
}
return result;
}
console.log(uniq3(array))
法3: 利用Es7 includes
function uniq4(arry) {
var result = [];
for (var i = 0; i < arry.length; i++) {
if (!result.includes(arry[i])) {
//如 result 中没有 arry[i],则添加到数组中
result.push(arry[i])
}
}
return result;
}
// console.log(uniq4(array))
法4:利用 reduce 适合累加 累乘
function uniq5(arry) {
return arry.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
}
console.log(uniq5(array))
法5:利用 Map
function uniq6(arry) {
//Map与Object的区别 Object里的属性是字符串 Map里的key可以是任意的数据类型 key:value
let map = new Map();
let result = new Array();
for (let i = 0; i < arry.length; i++) {
if (map.has(arry[i])) {
map.set(arry[i], true);
} else {
map.set(arry[i], false);
result.push(arry[i]);
}
}
return result;
}
console.log(uniq6(array))