首先生成一个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);
网友评论