问题
编写函数mynorepeat(arr) 将数组的重复元素去掉,并返回新的数组 (此题为13K)
[1,2,1,34,2,5,6,2]
去重后:
[1,2,34,5,6]
首先定义一个自定义函数,检查数组中是否存在某一个数字
function has(arr,num){
for( var i = 0 ; i < arr.length ; i++ ){
if( arr[i] == num ){
return true;//数组中存在num这个数
}
}
return false;//数组中不存在num这个数
}
思路一
思路一 : 定义一个空数组,遍历原数组中的数据,判断该数据在空数组中是否存在 , 如果不存在 就将这个数存入到空数组中
function noRepeat(arr){
var brr = [];//定义一个空数组 用于存放去重后的数据
//遍历原数组 取出每一个数据 判断这个数据在空数组中是否存在
for( var i = 0 ; i < arr.length ; i ++ ){
//判断arr[i]在brr中是否存在
if( !has( brr,arr[i] ) ){ //不存在的条件
brr.push( arr[i] );//不存在就将这个数存入到空数组中
}
}
return brr;//返回去重后的数组
}
思路二
将数组按照一定的顺序排序,遍历数组,比较数组中相邻的两个数,如果相邻的两个数不相等,就将前一个数存入到一个空数组中
//最后 空数组中的数据就是去重后的数据
function noRepeat2(arr){
var brr = [];//用于存放去重后的数组
for( var i = 0 ; i < arr.length ; i ++ ){
if( arr[i] != arr[i+1] ){
//将前一个数存入到数组中
brr.push( arr[i] );
}
}
return brr;
}
思路三
还有一个比较复杂的方法
var norepeat = function(arr1){
for(var i = 0 ; i<arr1.length ; i++){
console.log(arr1[i]);
for (var j = i+1; j < arr1.length ; j++) {
if (arr1[i] == arr1[j]) {
console.log(arr[j]);
arr1.splice(j,1);
j--;
// arr1.length-=1;
}
}
}
}