1.Set+展开运算符
let arr = [ 1,2,3,4,2,3 ]
let ary = [ ...new Set(arr) ]
2.Array.form+Set
let arr = [ 1,2,3,4,2,3 ]
let ary = [ Arrat.form(new Set(arr)) ]
1.indexOf 配合splice
let arr = [1, 2, 3, 4, 2, 3]
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
console.log(item); //123423
let args = arr.slice(i + 1) // 去掉当前要比较的项,方便下一步indexOf进行判断
if (args.indexOf(item) > -1) {
// indexOf 如果未找到和当前项一样的,会返回-1
//现在的条件是>-1 说明后面有重复的
arr.splice(i, 1) //从当前项截取,一个数字。但是循环会i++ ,会造成数组塌陷
i-- //防止数组塌陷
}
}
console.log(arr);
2.indexOf 和替换思维(和第一步基本相同,就是将splice方法换成替换)
let arr = [1, 2, 3, 4, 2, 3]
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
console.log(item); //123423
let args = arr.slice(i + 1)
if (args.indexOf(item) > -1) {
// indexOf 如果未找到和当前项一样的,会返回-1
//现在的条件是>-1 说明后面有重复的
arr[i] = arr[arr.length - 1] //把当前重复的项。 用最后一项,替换当前重复的项
arr.length-- //替换相当于去掉,所以数组长度减一
i-- // 数组塌陷,提前--
}
}
console.log(arr);
3.indexOf +赋值+过滤
let arr = [1, 2, 3, 4, 2, 3]
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
console.log(item); //123423
let args = arr.slice(i + 1)
if (args.indexOf(item) > -1) {
// indexOf 如果未找到和当前项一样的,会返回-1
//现在的条件是>-1 说明后面有重复的
arr[i] = null //把当前重复的全部赋值为null
}
}
// 在输出结果之前,将数组中为null的项,全部过滤
arr = arr.filter(item => item !== null)
console.log(arr);
1.创建新数组+indexOf+push
let arr = [1, 2, 3, 4, 2, 3]
let newArr = [] //创建新的空数组
for (let i = 0; i < arr.length; i++) {
let item = arr[i]
let args = arr.slice(i + 1)
if (args.indexOf(item) > -1) {
// indexOf 如果未找到和当前项一样的,会返回-1
//现在的条件是>-1 说明这里有重复的
} else {
// 那else里面存放的就是数组没有重复的项,将没有重复的项,push到新数组里面
newArr.push(item)
}
}
console.log(newArr);
正则+slice
let arr = [1, 2, 3, 4, 2, 3]
arr = arr.sort((a, b) => a - b) //升序排列
arr = arr.join('#') + '#'
let reg = /(\d+#)\1*/g // 出现一个根第一个一模一样的分组
ary = []
arr.replace(reg, (n, m) => { //大正则捕获 n 是所有的单个重复 m 是单个的
console.log(n, m);
ary.push(Number(m.slice(0, m.length - 1)))
})
console.log(ary);
具体介绍
+. slice
: 从已有数组返回指定元素
+. splice
(会引起数组塌陷)
方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
+. indexOf
如果未找到和当前项一样的,会返回-1
+. 数组塌陷
:改变原数组,数组的所有索引发生改变,如果再进行++操作,会把第一个元素漏掉,所以++之前,先进行-- ,
+.
优缺点: – 进行计算,会降低性能
;用新东西进行存储,会开辟内存空间
;最优方案:正则