生成(1--100)无序数组,取出101个数中的重复数字

首先生成一个1--100的无序数组

 var arr=[]    for(var i=0;i<100;i++){        arr[i]=i+1    }    arr.sort(function(){       return 0.5- Math.random();    }) 

插入1--100中任意一个数,使数组长度变为101,其中有一个重复的数字,到此为止才将需要操作的数组创建出来 

arr.push(Math.floor((Math.random() * 100) + 1))

方法一:

arr.sort((a,b)=> {    return a-b  })      // 从小到大排序

let num  

 // 此时数组已经按顺序排好,遍历如果当前项和下一项的数值相等,那么就将值赋给变量,这个变量值就是重复的那个数

for(let i = 0 ; i < arr.length ; i++) {    

        if(arr[i] == arr[i+1]) {      

                    num = arr[i]    }  

}  

console.log(num)

方法二:

arr.sort((a,b)=> {  return a-b  })   //还是要排序

let newArr=[]

// 遍历数组,如果当前项数字和对应的索引值相等,那么就是说明出现了重复的数字,导致了索引错乱,正常应该是差值为1

// 将这个数字放进新的数组中,重复数字往后的数据都满足条件并且被放进了数组里,只有数组的第一个才是答案

arr.forEach((item,index)=>{    

        if(item==index){      

                newArr.push(item)    }  })  

console.log(newArr[0])

方法三:

let obj={}   

// 遍历这个无序数组,每遍历一项就添加到这个空对象中,如果这个对象中已经存在这个键,就说明这一项曾经出现过,那么就将对应的值赋值为2,如果没出现过就赋值为1

(由于这个题目只是说出现过一次重复的数据,所以直接赋了值,如果没有说明,可以直接通过值++的方式)

arr.forEach(item=>{  

        obj[item]?obj[item]=2:obj[item]=1  })  

let num  

// 遍历对象,找到值为2的数据项,对应的key就是所要的值

for(let key in obj) {    

        if(obj[key] == 2) {      

                num = key    }  }  

console.log(num);

方法四:

// 由于以下方法会影响到原数组的值,所以通过序列化反序列化的方式深拷贝出来一个新的数组

 let arr1 = JSON.parse(JSON.stringify(arr))  

   let num  

//遍历新数组,从第一个索引值对应的数值开始删减1,并同时为了不改变数组的长度添加进去一个0,如果在删除之后新的数组中还包含当前这个数字,那么就说明它是重复项,就将只赋值给变量即可,即为所求值

    arr1.forEach((item,index)=>{    

        arr1.splice(index,1,0)    

    if(arr1.includes(item)==true){      

        num=item    }  })    

console.log(num);

你可能感兴趣的:(生成(1--100)无序数组,取出101个数中的重复数字)