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

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

作者: 沃德麻鸭 | 来源:发表于2022-04-07 12:02 被阅读0次

    首先生成一个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个数中的重复数字

          本文链接:https://www.haomeiwen.com/subject/bxaojrtx.html