<script>
//数组去重
// 方法一 Es6 Set
var arr = [1, 5, 6, 6, 8, 2, 1, 5]
// 1.new Set(传入数组)
var a = new Set([1, 5, 6, 6, 8, 2, 1, 5])
console.log(a);//此时数组中的重复的元素被去除掉了,但是打印的格式为Set(5) {1, 5, 6, 8, 2},不是数组的形式
//2.去重完毕,转换成数组 Array.from(set)
var b = Array.from(a)
console.log(b);//此时打印的结果为 [1, 5, 6, 8, 2]
//方法二 indexOf indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符String str在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
var arr = [1, 5, 6, 6, 8, 2, 1, 5]
var arr1 = [];
for (var i = 0; i < arr.length; i++) {//此for语句的目的是遍历数组arr,
if (arr1.indexOf(arr[i]) === -1) {//arr1.indexOf(arr[i]) === -1表示数组arr1中没有arr中的元素,如果arr1中有arr里面的元素,则不会返回-1,就不会执行下面的操作
// 此处的if语句中arr[i]中的i表示,不同索引号对应的arr里面的元素,indexOf( , )中第一个数据表示要查找的元素,第二个数据表示,从哪个索引开始查找,可以不写,不不写默认从头开始查找。
//当i=0时,进入进入if语句此时,arr[0]为1,arr1.indexOf(1)在空数组arr1中查找1,因为没有对应的元素,所以此时会===-1,所以执行if下面的语句,此时arr1中出现了一个值1,当i=1时,arr[1]=5,arr1.indexOf(5),在数组arr1中查找元素5,但是没有对应的元素,所以此时仍然是===-1,所以执行if下面的语句,此时arr1中会多出一个元素5,。。。
arr1.push(arr[i]) //表示将arr中满足条件的元素,推到arr1中
}
}
console.log(arr1);
//方法三 开关+双重for循环
var arr = [1, 5, 6, 6, 8, 2, 1, 5]
var arr1 = []
for (var i = 0; i < arr.length; i++) { //外层执行一次,里层执行全部
var flag = true //先设定开关为开
for (var j = 0; j < arr1.length; j++) {//当j=0时,因为此时arr1为空数组,所以此时不会执行for里面的内容,会直接进入到最下面的if里面,此时arr1中被推入了一个元素1,此时一遍循环完成,进入下一次循环,i=1,进入第二个for,j=0时,进入第二个for里面的if语句,判断arr[1]是否等于arr1[0],不满足,判断arr[1]是否等于arr1[1],arr1[1]等于1,不满足,进入第二个if语句,此时arr1中被推入了一个5,再进行判断
if (arr[i] === arr1[j]) { //表示在循环时,如果arr中的元素如果等于arr1中的元素,则开关 关闭,跳出里层这个for循环,然后,继续外层的循环
flag = false
break
}
}
if (flag) {
arr1.push(arr[i])
}
}
console.log(arr1);
</script>