1、利用indexOf功能的特点:
- 根据数据查找所在的索引,没有数据的话就返回 -1
var arr = [1,1,2,3,4,6,2,3];
var newArr = [];
for(var i =0;i<arr.length;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
console.log(newArr);
2、将数组的每一个元素依次与其他元素做比较,发现重复元素,删除
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
function noRepeat(arr) {
for(var i = 0; i < arr.length-1; i++){
for(var j = i+1; j < arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1);
// 注意这里一定要j--,如果不减的话,那么删掉一个之后,
//后面的会往前走一位,但是索引是往后走的,如果不减,就相当于跳过了一位
j--;
}
}
}
return arr;
}
var arr2 = noRepeat(arr);
console.log(arr2);
3、借助indexOf方法判断此元素在该数组中首次出现的位置索引与循环的索引是否相等
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
// indexOf,如果查询到重复的数据,那么它只返回第一次查询到数据的索引
// 后面在遇到重复的,也是返回第一次的索引
function noRepeat(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) != i) {
arr.splice(i,1);
//删除数组元素后数组长度减1后面的元素前移
// 所以要i--,可以参考方法2的解释
i--;
}
}
return arr;
}
var newArr = noRepeat(arr);
console.log(newArr);
4、借助新数组 通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等则添加到新数组中
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
function noRepeat(arr) {
var ret = [];
for (var i = 0; i < arr.length; i++) {
// indexOf 如果有重复的数据,那么它只返回第一次遇到数据的索引
// 这里如果查找的数据的索引和遍历的索引不相等了 说明找到了重复的数据
if (arr.indexOf(arr[i]) == i) {
ret.push(arr[i]);
}
}
return ret;
}
var arr2 = noRepeat(arr);
// console.log(arr2);
5、双层循环改变原数组
var arr = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6];
function noRepeat(arr){
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) {
// 如果比较的数据相等了 而且两个索引不相等,说明我重复的数据
// 删除
arr.splice(j, 1);
}
}
}
return arr;
}
var arr2 = noRepeat(arr);
console.log(arr2);