个人简介
⭐ 个人主页:我是段段
博客领域:编程基础、前端
写作风格:干货!干货!都是干货!
精选专栏:数组
支持段段:点赞、收藏⭐、留言
(1)indexOf()方法
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
function removeRepeat(val){
let newArr = []
val.forEach( item => {
if(newArr.indexOf(item) == -1){
newArr.push(item)
}
})
return newArr.sort()
}
使用indexOf()方法,判断当前值是否在新数组中存在,如若不存在,即返回值为-1
,就将其push到新数组中
(2)splice()方法
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
function removeRepeat(val){
for(var i = 0; i < val.length - 1; i++){
for (var j = i + 1; j < val.length; j++) {
if(val[i] == val[j]){
val.splice(j, 1)
j--
}
}
}
return val.sort()
}
使用splice()方法去重需要使用两层for
循环,使用数组中的第一个值依次与后面的每一个值进行判断,看其是否相等,如若相等,则使用splice()方法从后面相等值
的下标开始删除1项
,然后让j
进行自减,因为减去一个值后,原数组的长度发生了变化,即后面的值已经填充了刚才删除值得位置,所以需要再次进行判断
(3)数组下标判断法
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
function removeRepeat(val){
let newArr = []
for (var i = 0; i < val.length; i++) {
if(val.indexOf(val[i]) == i){
newArr.push(val[i])
}
}
return newArr.sort()
}
indexOf()
方法的定义:可返回某个指定的字符串值在字符串中首次出现的位置
,正是使用了这一特性,判断值首次出现时的i
和使用indexOf()
方法查找的是否一直,若二者相等,则表示该值是首次出现
(4)排序相邻去除
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
function removeRepeat(val){
val = val.sort((a, b) => a - b)
let newArr = [val[0]]
for (var i = 1; i < val.length; i++) {
if(val[i] !== newArr[newArr.length - 1]){
newArr.push(val[i])
}
}
return newArr
}
注意:使用此方法必须先对数组进行排序(升序降序均可),将排序后的第一个值放入新数组,然后从第二个值开始判断,其是否与新数组中的最后一个相等,如若不等,即可向新数组中push
(5)ES6中Set()去重
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
// 可以使用ES6的扩展运算符
function removeRepeat(val){
return [ ...new Set(val) ].sort()
}
// 可以使用Array.form()
function removeRepeat(val){
return Array.from(new Set(val)).sort()
}
ES6中新增了Set容器,它类似于数组,但是成员的值都是唯一的,没有重复的值,Set()
本身是一个构造函数
,所以需要使用new关键字
(6)利用对象的属性去重
let arr = [4, 1, 3, 2, 4, 1, 2]
arr = removeRepeat(arr)
console.log(arr) // [ 1, 2, 3, 4 ]
function removeRepeat(val){
let newArr = []
let obj = {}
val.forEach(item => {
if(!obj[item]){
newArr.push(item)
obj[item] = 1
}
})
return newArr.sort()
}
因为对象中的键名是不能重复的,所以将不重复的值在对象中进行标识。首先判断每一个值是否作为键名存放在对象中,如若没有,则向新数组中push该值,并且在对象中将以该值作为键名的键值
赋值为1
// 方法一
let m = [3, 1, 2],
n = [3 ,4 ,5, 2],
result = []
result = removeRepeat(m, n)
console.log(result) // [ 1, 2, 3, 4, 5 ]
function removeRepeat(){
let arr = [].concat.apply([], arguments)
return Array.from(new Set(arr)).sort()
}
// 方法二
let m = [3, 1, 2],
n = [3 ,4 ,5, 2],
result = []
result = removeRepeat(m, n)
console.log(result) // [ 1, 2, 3, 4, 5 ]
function removeRepeat(m, n){
let arr = m.concat(n)
return [ ...new Set(arr) ].sort()
}
方法一首先使用apply()
方法接收类数组,然后再使用concat()
方法进行合并,最后使用Set()
方法进行去重
方法二首先将两个数组使用concat()
进行合并,然后使用Set()
方法进行去重
这次的分享就到这里了,后续了解了新的知识再来补充~~