方法一(indexOf()):
- 新建一个空数组
- 遍历原数组
- 用indexOf() 判断循环出来的元素下标是否和元素在数组中的索引是否相等
- 如果相等(则说明这是一个不重复的元素),则把数据推送至新数组里面
var arr1 = [1,3,5,7,9,1,3,5,7];
var arr2 = [];
for(var i=0; i<arr1.length; i++){
if(arr1.indexOf(arr1[i]) == i){
arr2.push(arr1[i])
}
}
console.log(arr2)
方法二(indexOf() / splice()):
- 遍历数组
- 用indexOf() 判断循环出来元素下标是否和元素在数组中的索引是否不相等
- 如果不相等(则说明这是一个 的元素),则把该元素从数组中删除
- 删除后数组长度变短,所以索引也要减一
var arr1 = [1,3,5,7,9,1,3,5,7];
for(var i=0; i<arr1.length; i++){
if(arr1.indexOf(arr1[i]) != i){
arr1.splice(i, 1)
i--;
}
}
console.log(arr1)
方法三(splice()):
- 循环两次数组
- 判断每次循环的值是否一样并且下标不一样,找到后截去第二重数组所对应的下标位置的这个元素
- 原数组则会变成去重后的新数组
var arr1 = [1,3,5,7,9,1,3,5,7];
for(var i=0; i<arr1.length; i++){
for(var j=0; j<arr1.length; j++){
if(arr1[i]==arr1[j] && i!=j){
arr1.splice(j, 1)
}
}
}
console.log(arr1)
方法四(ES6写法):
- new Set() Set 结构不会添加重复的值。
- 扩展运算符... 转成数组
var arr1 = [1,3,5,7,9,1,3,5,7];
var arr2 = new Set(arr1);
console.log([...arr2])
方法五(ES6写法):
- new Set() Set 结构不会添加重复的值。
- Array.from()转成数组
var arr1 = [1,3,5,7,9,1,3,5,7];
var arr2 = new Set(arr1);
console.log(Array.from(arr2))
方法六(reduce()方法):
- new Set() Set 结构不会添加重复的值。
- Array.from()转成数组
let arr = [1,1,2,3,4,5,5,6]
let arr2 = arr.reduce((ar,cur)=>{
if(!ar.includes(cur)) {
ar.push(cur)
}
return ar
},[])