关于前端:JavaScript全解析数组去重

数组去重

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

计划一
●咱们能够利用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)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理