本文小编为大家详细介绍“JavaScript数组如何去重”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript数组如何去重”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1.双循环去重
var data = [1,2,4,3,5,2,1,3,2]var newData = []for(var i=0;i<data.length;i++) { for(var j=i+1;j<data.length;j++) { if (data[i] == data[j]) { // j = i = i + 1 j = ++i } } newData.push(data[i]) }console.log(newData.sort())
外面循环是每次取数组一个值,里面的循环是遍历除了取了的值以外的后面的所有值作比较,如果有相等的话,就跳过进行下轮循环比较,如果当前值没有找到任何相等的值,就添加到新数组
这个就是取数组里面的值取一一比较,如果这个值在数组后面的项里有了,那我就不要这个值,依次类推,其实就是取数组里这个值的最后一项,因为已经是最后一项了,不可能有相等的
2.双循环+splice去重
const arr = [1, 2, 3, 5, 4, 3, 2, 1];for (var i=0;i<arr.length; i++) { for (var j=i+1;j<arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j,1) j-- } } }console.log(arr)// 打印结果[1, 2, 3, 5, 4]
通过双循环判断数组里是否有相同的值,如果有相同的值,就将后面相同的值去掉,splice方法会改变原数组,splice()方法返回的是分割的值的数组,原数组就是除去被分割出去的值后剩余值的数组
为社么j--?因为分割后,原数组长度减一了,上一个值降下来了,如果j不减1,在数组里面的j就是上一个值了,在加一下,就相当于跳过了,所以需要减1然后再执行循环里的加1获取上一个值
3.循环+闭包+indexOf
var data = [1,2,4,3,5,2,1,3,2]var newData = []for(var i=0;i<data.length;i++) { ;(function () { if (newData.indexOf(data[i]) === -1) { newData.push(data[i]) } })(i); }console.log(newData.sort())
通过循环遍历,传入循环数组的索引,然后通过indexOf判断新数组里面是否有这个数组索引的值,如果没有,则将数组索引的值添加到新数组里面
4.循环+对象
var data = [1,2,4,3,5,2,1,3,2]var newData = []var obj = {}for(var i=0;i<data.length;i++) { if (!obj[data[i]]) { obj[data[i]] = 1 newData.push(data[i]) } }console.log(newData.sort())
这个方法利用的就是同一个对象的key值不能重复,所以通过判断对象里是否有当前数组索引的值,如果没有,则将这个数组值作为key添加到对象里面,通过也把这个值添加到新数组里面,如果对象有这个key值和数组索引的值相同,则跳过
5.ES6语法-Set
var data = [1,2,4,3,5,2,1,3,2]var newData = [] newData = new Set(data)console.log(newData)
读到这里,这篇“JavaScript数组如何去重”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。