学习链接来源:juejin.cn/post/684490…
详细文章点击上链接
双重循环
function qc(arr)
{
var i = 0;
var j = 0;
var tempArr = []
for(i = 0;i<arr.length;i++){
for(j = 0;j<tempArr.length;j++){
if(arr[i]==arrrst[j]){
break;
}
}
if(j==tempArr.length){
tempArr.push(arr[i])
}
}
return tempArr
}
indexof取代双循环的内循环
function qc2(arr)
{
var i = 0;
var tempArr = []
for(i = 0;i<arr.length;i++){
if(tempArr.indexOf(arr[i])<0){
tempArr.push(arr[i])
}
}
return tempArr
}
splice删掉后续重复部分
复杂化了
function qc3(arr){
var tempIndex = 0
var tempArr = [...arr]//克隆一份
for(var i = 0;i<tempArr.length;i++){
tempIndex = i+1
while(tempIndex>=0){
tempIndex = tempArr.indexOf(tempArr[i],tempIndex)
if(tempIndex>=0){
tempArr.splice(tempIndex,1)
}
}
}
return tempArr
}
filter过滤
由于indexof(ele)始终返回的是第一次查询到ele的数组索引,因此后续ele重复了,index却不是第一个查到值的索引,返回false,被滤掉
function qc4(arr){
return arr.filter(function(ele,index,self){
return self.indexOf(ele) === index
})
}
sort排序,比较当前和上一个值
function qc5(arr){
var tempArr = []
var tempArr2 = [...arr]//克隆一份
tempArr2 = tempArr2.sort()
tempArr.push(tempArr2[0])
for(var i = 1;i<tempArr2.length;i++){
if(tempArr2[i-1]!=tempArr2[i])
{
tempArr.push(tempArr2[i])
}
}
return tempArr
}
利用对象属性的唯一性
function qc6(arr){
var tempObj = {}
var tempArr = []
for(var i = 0;i<arr.length;i++){
if(tempObj[arr[i]]===undefined){
tempObj[arr[i]] = "ok"
tempArr.push(arr[i])
}
}
return tempArr
}
利用Set集合不重复
function qc7(arr){
return [...new Set(arr)]
//return Array.from(new Set(arr))和上一效果一样
}