|
因为真实项目中,去重可能不仅仅是对一些数字的去重,可能还包含一些字符串,数字混合的场景,所以我们这里随意想一个混合数组,例如:
let arr = ['2022-03-21', "我", 3, 8, 5, 3, 4, "我", 3, '2022-03-21', '2022-03-22', 8]; 1. 第一种方法(嵌套双成循环) 第1种是定义一个新的空数组,再执行嵌套双循环,监测空数组中如果没有的元素,push进空数组中,我们push一个元素,跳过第一次循环(continue),第二次再进行循环对比 let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.length === 0) {
newArr.push(arr[i]);
continue;
}
for (let j = 0; j < newArr.length; j++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
}2. 第二种方法(indexOf)
第2种是第一种的改进,也是新定义一个空数组,利用indexOf监测新数组中是否包含某个元素. let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}3. 第三种方法(set)
第3种就是es6之后出的set了,set本身的设定就是非重复的类数组,所以才有了数组与set互相转换的知识点,而set转为数组可以是 [...set]这种解构形式,也可以是Array.from(set)的方法 let mySet = new Set(arr); // 非重复的类数组
let newArr = Array.from(mySet); // set转数组
// let newArr = [...mySet]; // 或者是这种解构方法
document.write(newArr);
4. 第四种方法(includes) 第4种是利用数组内置的includes方法,监测数组中是否包含某个元素; let newArr = [];
for (let i = 0; i < arr.length; i++) {//遍历数组
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}</i></i>
5. 第五种方法(filter) 利用filter的内置方法,filter接收一个内置函数,而函数自身又接收3个参数,item相当于arr,index相当于i索引,arr就是数组本身,某些情况需要传入arr,但本案例因为比较简单,就不传入了。利用indexOf首次查找索引的方式,返回原数组中元素首次出现的所有元素,达到去重效果 let newArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
}) |
|
最新喜欢: |
|
沙发#
发布于:2023-01-18 10:38
不错,总结到位哦
|
|
|