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

34次阅读

共计 2343 个字符,预计需要花费 6 分钟才能阅读完成。

数组去重

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

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

正文完
 0