数组去重的四种方法
方法一:双重for循坏
核心:外循环遍历array数组,内循环遍历新生成的数组,当新数组的元素与外循环的元素不一致时就push到新数组中。
代码实现如下
<script>
let array = [12, 14, 12, 13, 13, 14]
function removesame(arr) {
let b = []
let flag = true
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < b.length; j++) {
if (arr[i] == b[j]) {
flag = false
break
} else {
flag = true
}
}
if (flag) {
b.push(arr[i])
}
}
return b
}
console.log(removesame(array))
</script>
方法二:set()方法
核心:Set对象是一组不重复的值,重复的值会被忽略,new出来的是一个对象要用展开运算符放到一个数组里面
代码实现如下:
<script>
var arr = [12, 14, 12, 13, 13, 14]
var nv = [...new Set(arr)]
console.log(nv);
// 两个数组合并之后去重
let a = [1, 2, 4, 2, 3, 1, 2, 2]
let b = [2, 5, 2, 3, 1, 5, 3, 3]
let c = [...new Set([...a, ...b])]
console.log(c);
</script>
方法二补充:将对象转换为数组的两种方法 , for of 或者array.from
代码如下:
<script>
// 补充:变量c是一个对象,转换为数组可以
// 用for of(Set对象自带Iterator接口,如果没有用for of就会报错。)遍历
let a = [1, 2, 4, 2, 3, 1, 2, 2]
let c = new Set(a);
for (let val of c) {
console.log(val);
}
console.log(c);
// 或者用array.from 方法
let a = [1, 2, 4, 2, 3, 1, 2, 2]
let c = new Set(a);
let d = Array.from(c);
console.log(d);
</script>
方法三:indexof
核心:当indexof没有匹配到相同的元素就会返回-1
代码实现如下:
<script>
let arr = [1, 3, 4, 6, 8, 3, 5, 7, 5, 3, 4, 6]
let ar = []
for (let i = 0; i < arr.length; i++) {
// 当indexof没有匹配到与ar相同的元素就会返回-1,为-1时就是我们要找的元素
if (ar.indexOf(arr[i]) === -1) {
ar.push(arr[i])
}
}
console.log(ar);
</script>
方法四: includes方法
核心:检测数组是否有某个值,没有某个值就返回false
代码实现如下:
<script>
let arr = [1, 3, 4, 6, 8, 3, 5, 7, 5, 3, 4, 6]
let ar = []
for (var i = 0; i < arr.length; i++) {
if (!ar.includes(arr[i])) {
//includes 检测数组是否有某个值,没有某个值就返回false,
//那么当前元素也就是我们要的
ar.push(arr[i]);
}
}
console.log(ar);
</script>