数组去重方法1:
* 循环去重 arr.indexOf();
* 循环时判断新数组中是否存 当前被循环的这个元素,如果不存在就向新数组中添加,存在则什么都不做
let arr = ['A', 'C', 'A', 'B', 'E', 'C', 'F', 'B', 'D', 'A'];
let nArr = [];
for (let i = 0; i < arr.length; i++) {
if (-1 === nArr.indexOf(arr[i])) {
nArr.push(arr[i]);
};
};
console.log(arr); //['A', 'C', 'A', 'B', 'E', 'C', 'F', 'B', 'D', 'A'];
console.log(nArr); //["A", "C", "B", "E", "F", "D"];
数组去重方法2:
* 数组过滤去重 filter();
* filter()是数组中自带的方法,
* filter(callback(item, index, arr){}) 有一个回调函数参数
* 回调函数中有3个参数:
- item 当前项,
- index 当前索引值,
- arr 数组本身
* 用于过滤数组中,满足条件的元素,并返回一个新数组,不会修改原来的数组
* 如果当前元素满足条件true就返回该元素,如不是满足条件false则不返回
let arr = ['A', 'C', 'A', 'B', 'E', 'C', 'F', 'B', 'D', 'A'];
let nArr2 = arr.filter((item, index, arr) => {
return index === arr.indexOf(item); //indexOf用于从左向右查找数组中指定的元素,如果找到就返回该元素所在的下标,如果找不到则返回-1
});
console.log(arr); //["A", "C", "A", "B", "E", "C", "F", "B", "D", "A"]
console.log(nArr2); //["A", "C", "B", "E", "F", "D"]
数组去重方法3:
* 对象的特性去重;
* 对象的特性:
- 对象中的key是唯一的(因为一个对象的属性名是不能重复的)
- 也就是:如果对象中的属性也存在时,又新增加 或 修改这个属性,会把之前已存在的属性覆盖,而不是新增!!
//对象的特性去重 就是把数组元素当作对象属性名来进行赋值
let arr = ['A', 'C', 'A', 'B', 'E', 'C', 'F', 'B', 'D', 'A'];
let Obj = {};
let nArr = [];
for (let i = 0; i < arr.length; i++) {
Obj[arr[i]] = arr[i];
};
for (let i in Obj) {
nArr.push(i);
}
console.log(Obj); //{A: "A", C: "C", B: "B", E: "E", F: "F"}
console.log(nArr); //["A", "C", "B", "E", "F", "D"]
//对象的特性去重 -- 简写方法
Array.prototype.toArrReset = function() {
let obj = {};
let arr = [];
for (let i = 0; i < this.length; i++) {
if (!obj[this[i]]) {
obj[this[i]] = this[i];
arr.push(this[i]);
};
};
return arr;
};
console.log(arr.toArrReset()); //["A", "C", "B", "E", "F", "D"]
数组去重方法4:
* Set集合特性去重:
- Set()集合: 是ES6中的新增的方法
- Set()集合是一种无重复元素的列表,因此new Set(arr)会自动剔除重复元素;
- 再通过Array.from(new Set(arr)) 或 [...new Set(arr)],将 Set集合转换为数组。
let arr = ['A', 'C', 'A', 'B', 'E', 'C', 'F', 'B', 'D', 'A'];
function toArrReset(arr) {
// return [...new Set(arr)];
return Array.from(new Set(arr));
};
console.log(Arr); //["A", "C", "A", "B", "E", "C", "F", "B", "D", "A"]
console.log(toArrReset(Arr)); //["A", "C", "B", "E", "F", "D"]