去除数组中的重复项
分析:首先,先创建一个新的空数组,遍历需要去重的数组,然后,将没有重复的数组元素添加到新的这个空的数组中。
方法一:用两个for循环
var arr = [20,20,30,30,60,15,29,15];
function arr_2(arr)
{
var result=[];
var num = result.length;
// 遍历数组arr[]
for(var i = 0;i < arr.length;i ++)
{
// 遍历数组result,但是result的length在变化
for(var j = 0;j<result.length;j++)
{
// 如果arr[i]等于result[j],就跳出循环,不让 j++ ,此时跳出循环的j,没有到 result.length
if(arr[i] == result[j])
{
break;
}
}
//随后判断,j 是否等于 result.lenght,如果等于,则这个for循环运行到了最后,没有中途break,即没有重复项,就添加到新的数组中,否则,不添加到新的数组中
if(j==result.length)
{
result[result.length] = arr[i];
}
}
console.log(result)
}
arr_2(arr)
方法二:用关联数组,哈希数组(一个for循环)
function hash(arr){
// 创建两个空数组,
for(var i=0,result=[],new_arr=[];i<arr.length;i++)
{
// arr的数据存放 为result的下标(下标是唯一的),若下标为undefined,则没有创建这个下标,若不为undefined,则已经存在这个下标
if(result[ arr[i] ]===undefined)
{
// 根据result 中不重复的下标---arr[i] (将arr的重复项 自动不记录在内) 然后赋值给 new_arr[] ---------根据下标不重复,来 将不重复的元素添加到 新的数组 中
new_arr[ new_arr.length ]=arr[i];
// 这里是给result 数组 的不同下标 存储数据 ,让已创建的下标的内容不为 undefined ,好进行下一次的判断
result[arr[i]]=true;
}
}
console.log(new_arr)
}
hash(arr)
方法三:用ES6 set方法
Array.prototype.fun = function(){
return Array.from( new Set( this ) )
}
let arr =[1,2,3,3,4,5,4,4]
arr.fun()