给数组去重:
let arr=['ar1','ar1','ar1','ar1','ar1','ar2','ar2','ar2','ar2','ar2','ar2','ar3','ar3','ar3','ar3','ar3','ar4','ar4','ar4','ar4','ar4','ar5','ar5','ar5','ar5','ar5','ar5']
一.for+indexOf过滤:
先建立一个数组,用来做新数组的容器。
let newArr=[ ]
然后用for循环
for循环的范围是arr的长度减一
for(let i=0;i<arr.length;i++){
if语句,条件是查找newArr数组,检查newArr的中是否有arr[i]的对应的值,当得到-1时意味着newArr中没有这项数组项。
if ( newArr . indexOf (arr[i]) === -1 ){
如果没有,就把他push进数组项。
newarr.push(arr[i])
}
}
二.filter过滤去重
过滤属性,函数第一个值是值,第二个值是索引。
let newArr= arr.filter( function (v,i,a){
indexOf:如果相同值的数值项,会输出第一个相同值的位置索引值
获取arr.indexOf(v) 的意思是数组arr的每一项值的索引位置
return arr.indexOf(v)===i
过滤函数里的 i 表示的是所有值的索引位置。
例:let arr=['ar1','ar1','ar1','ar1','ar1','ar2','ar2','ar2','ar2','ar2','ar2','ar3','ar3','ar3','ar3','ar3','ar4','ar4','ar4','ar4','ar4','ar5','ar5','ar5','ar5','ar5','ar5']
arr1 索引为0,第二个arr1 索引为1,第三个arr1 索引为2……
过滤函数返回的值为这两个值相等也就是过滤掉索引不相等的值了。
index找的都是首次出现的数组项,如果你是首次出现,会返回一个值。
})
三、splice
splice可以删除也可以添加替换,可以用splice配合for循环去重
for(let i=0;i<arr.length;i++){
for(let j=i+1;i<arr.length;j++){
i是arr数组的前一位。
j是在i的后一位。
进行两两比较,如果两个值相等就删除掉
if(arr[i]===arr[j]){
arr.splice(j,1);
j--;
因为函数是改变原数组的,所以要加上j--,不加j--就会删除后跳过某个索引,
就是说j--是删除后才j--,不删除不会触发j--。
例如:
ar1 ar1 ar1 ar2 ar2 ar3
0 1 2 3 4 5
第一次:i=0 ,j=1 ,splice(1,1)删除了arr1
删除后面的ar1后,原数组的位置改变了:
ar1 ar1 ar2 ar2 ar3
0 1 2 3 4 5
之前的ar1对应着 的位置变成了索引[1]
遍历下去,i=1;j=2 比较的两个为arr1和arr2 ,arr1逃过了
这种情况要j-- 删除之后不让他加了
}
}
}