本文总结了JavaScript中实现数组去重的六种常见方式,包括双重循环法、indexOf判断法、filter结合indexOf、先排序后对比、利用对象属性以及ES6的Set数据结构。通过具体代码示例与运行结果分析,对比各方法的复杂度与适用场景,帮助开发者根据实际需求选择最优方案。
方式一:循环法去重
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
//设置初始值为空数组
var res = []
//数组遍历
for (let i = 0; i < arr.length; i++) {
//设置一个初始值
let flag = true
//继续二次遍历 如果值相同 就不放入新数组
for (let j = 0; j < res.length; j++) {
if (arr[i] === res[j]) {
flag = false
break
}
}
if (flag) {
res.push(arr[i])
}
//当flag1为true的时候 数组push
}
return res
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
[1, 2, 3, 4, 6, 7, 8, 9]
总结
暴力去重法虽然可行,但时间复杂度较高。通过双重for循环可以优化这一过程,尽管其效率仍不如后续介绍的方法。
方式二:indexOf去重
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
//设置初始值为空数组
var res = []
//数组遍历
for (let i = 0; i < arr.length; i++) {
//只要这个值在数组中是唯一出现就push到新数组里面
if(res.indexOf(arr[i])===-1){
res.push(arr[i])
}
}
return res
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
[1, 2, 3, 4, 6, 7, 8, 9]
总结
该方法利用数组中元素的唯一下标进行判断,从而提取出对应的唯一值。
方式三:filter去重
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
//元素在数组中第一次出现的位置是否和元素现在的位置相等
return Array.prototype.filter.call(arr,function(item,index){
console.log(arr.indexOf(item),item,index)
return arr.indexOf(item)===index
})
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
0 1 0 数组去重的第二种方式220313.html:24 1 2 1 数组去重的第二种方式220313.html:24 2 3 2 数组去重的第二种方式220313.html:24 3 4 3 数组去重的第二种方式220313.html:24 4 6 4 数组去重的第二种方式220313.html:24 5 7 5 数组去重的第二种方式220313.html:24 0 1 6 数组去重的第二种方式220313.html:24 1 2 7 数组去重的第二种方式220313.html:24 2 3 8 数组去重的第二种方式220313.html:24 9 8 9 数组去重的第二种方式220313.html:24 10 9 10 数组去重的第二种方式220313.html:30 (8) [1, 2, 3, 4, 6, 7, 8, 9]
总结
利用indexOf检测元素在数组中第一次出现的位置是否与该元素当前的索引位置相等。若不相等,则说明该元素为重复项,从而筛选出唯一值。
方式四:先排序再对比
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
//先对数组进行排序
arr = arr.sort()
console.log(arr,"arr")
//判断相邻得元素是不是相等 如果不相等就放进数组里面去
let res = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
res.push(arr[i])
}
}
return res
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
(11) [1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9] 'arr' 数组去重方式第四种220314.html:44 (8) [1, 2, 3, 4, 6, 7, 8, 9]
总结
通过先对数组进行排序,再对比相邻元素是否相等,从而获取对应的数据结果。
方式五:对象属性去重
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
let res = [],
obj = {}
//如果对象的属性值不存在 就放进去 不然就赋值+1
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
res.push(arr[i])
obj[arr[i]] = 1
console.log( obj[arr[i]],"obj[arr[i]]")
} else {
obj[arr[i]]++
console.log( obj[arr[i]],"obj[arr[j]]")
}
}
return res
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
[1, 2, 3, 4, 6, 7, 8, 9]
总结
如果对象的属性值不存在,则将其放入;否则标记为已存在(赋值1或2),以此实现去重。
方式六:Set去重
实现代码
var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
function ArrayCommon(arr) {
//判断是不是数组 不是数组就返回一个false
if (!Array.isArray(arr)) {
console.log('这不是一个数组哦')
return
}
return [...new Set(arr)]
}
console.log(ArrayCommon(geyao, 'geyao'))运行结果
[1, 2, 3, 4, 6, 7, 8, 9]
总结
通过new Set直接进行去重操作,这是ES6引入的一种简洁高效的方式。
到此这篇关于JavaScript中数组双重去重的方法总结的文章就介绍到这了,更多相关JavaScript数组双重去重内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!