数组去重

●就是把一个数组中反复呈现的数据只留下一个,没有反复呈现的就不必管了
●最初的数组外面只有不反复的数据

计划一
●咱们能够利用sort()办法进行排序
●让一样的数据挨着,前面咱们就能够判断前一个和后一个是不是一样,
●如果一样就删掉一个

//  定义一个数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);// 利用咱们的sort()办法先进行排序arr.sort()// 循环遍历咱们的数组for (var i = 0; i < arr.length; i++) {    // 判断咱们数组中的前一个和前面的一个数据是不是相等    if (arr[i] === arr[i + 1]) {        // 如果相等就删除掉一个        arr.splice(i, 1)        // 为了避免数组塌陷,咱们执行i--        i--    }}

计划二
●筹备一个新的数组,咱们能够判断新数组中的数据有没有和原始数组中数据一样的
●如果有,咱们就不增加,如果没有就能够增加到新数组中

//  定义一个数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);var arr1 = []// 遍历原始数组for (var i = 0; i < arr.length; i++) {    // 判断新数组中有没有原始数组中的数据    if (arr1.indexOf(arr[i]) === -1) {        // 把没有的增加到新数组中        arr1.push(arr[i])    }}console.log('新数组 : ', arr1);

计划三
●咱们能够利用双重循环的形式,让前一个数据和前面的每一个数据进行比拟
●如果有一样的,咱们就删掉一个

//  定义一个数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);for (var i = 0; i < arr.length; i++) {    // 外层循环执行一次,外面的循环是不是要比拟一轮啊    // 这里须要留神一下:内层循环还有必要从0开始吗    // 如果还是从0开始肯定是相等的    for (var j = i + 1; j < arr.length; j++) {        // 判断后面数据和前面的每一个是不是一样        if (arr[i] === arr[j]) {            arr.splice(j, 1)            j--        }    }}

计划四
●间接遍历数组,看看外面有没有反复的,有的话就间接删掉

//  定义一个数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);for (var i = 0; i < arr.length; i++) {    // 判断有没有反复的    var index = arr.indexOf(arr[i], i + 1)    // 如果index的值不是-1 阐明有反复的,咱们就删除反复的    if (index !== -1) {        // 删掉反复的数据        arr.splice(index, 1)        // 阻止数组塌陷        i--    }}

计划五
●咱们晓得对象外面的键名是不能反复的.如果有反复的就是相当于在修前一个的值
●所以咱们能够利用这个点实现一上来重

// 定义一个数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);// 定义一个空对象// var obj = {}// 循环遍历咱们的原始数组,把咱们数组中的数据作为咱们对象的命名for (var i = 0; i < arr.length; i++) {// 这里咱们是不是能够拿到咱们数组内的每一个数据console.log(arr[i]);obj[arr[i]] = '你好'}// 咱们看到咱们的键名曾经是不反复的原数组中的数据了console.log(obj);// 当初咱们要做的就是把对象中的键名取出来// 遍历咱们的对象// 创立一个新数组var arr1 = []for (var k in obj) {// 咱们的k 是能够拿到的 然而要增加到哪里呢? 须要咱们里面新建一console.log(k);// 把 k 增加到新数组中arr1.push(k - 0)}// 这个时候咱们看到咱们的新数组外面值是对的,然而类型不对// 因为k就是一个字符串类型 所以咱们-0就能够了console.log('新数组 : ', arr1);

计划六
●能够应用 Set 数据结构来进行数组去重

Set 数据结构
●Set() 数据结构是 ES6 中呈现的一个构造函数, 用来生成 Set 数据结构
●Set数据机构是一个 相似于 数组的数据结构
●Set函数能够承受一个数组作为参数
●特点: 所有元素都是惟一的,没有反复
●语法: var s = new Set([ 数据1, 数据2, 数据3, ... ])

// 原始的数组var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]console.log('原始数组 : ', arr);// 应用的时候咱们须要应用 new Set()把咱们去重的数组放进去// 咱们失去的返回值是一个 Set 数据结构var mySet = new Set(arr)console.log(mySet);

还原成数组
●Set 数据结构尽管能够去重, 然而去重结束当前不再是数组了
●咱们还须要把 Set 构造还原成数组
●计划1 :

// 筹备一个 Set 数据结构var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]var mySet = new Set(arr)var res = [ ...mySet ]cosnole.log(res)

●计划2 :

// 筹备一个 Set 数据结构var arr = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 4, 5, 1, 2, 3,]var mySet = new Set(arr)var res = Array.from(mySet)cosnole.log(res)