数组去重 && 快速排序 && 数组中重复元素最多的 && 深拷贝

复制代码

 var arr0 = [1,3,3,3,4,4,4,4,5,5];
var arr1 = [10,9,2,5,7,34,65,48,90,103];
        var newArr=[];
       /*  for(var i=0;i<arr.length;i++){
            newArr.indexOf(arr[i])<0 && (newArr.push(arr[i]));
        } */
        // newArr = Array.from(new Set(arr));

        // 快速排序
        function quikSort(arr){
            if(arr.length<=1)return arr;
            var midIndex = Math.floor(arr.length/2);
            var midVal = arr.splice(midIndex,1)[0];

            var leftArr = [];
            var rightArr = [];
            for (var val of arr){
               if(val<midVal){leftArr.push(val)}else{rightArr.push(val)}
            }
            /* for(var k=0;k<arr.length;k++){
                if( arr[k]<midVal ){
                    leftArr.push(arr[k])
                }else{
                    rightArr.push(arr[k])
                }
            } */
            return quikSort(leftArr).concat(midVal,quikSort(rightArr));
        }
        console.log( quikSort(arr1) );
复制代码

 数组中出现重复元素最多的:

复制代码
function maxCountElement(arr) {  
   var obj={};
   for(var i=0;i<arr.length;i++){  
       var key=arr[i];  
       if(obj[key]){
           obj[key]++;  
       }else{  
           obj[key]=1;
       }  
   }  
 
   var maxCount=0;
   var maxElement=arr[0];
   for(var key in obj){  
       if(maxCount<obj[key]){  
           maxCount=obj[key]; 
           maxElement=key;  
       }  
   }  
   return "该数组中出现次数最多的元素:"+maxElement+"出现了"+maxCount+"次";  
    }  
复制代码

对象深拷贝:

复制代码
function deepCopy(obj) {
      var result = Array.isArray(obj) ? [] : {};
      for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
          if (typeof obj[key] === 'object') {
            result[key] = deepCopy(obj[key]);   //递归复制
          } else {
            result[key] = obj[key];
          }
        }
      }
      return result;
    }
复制代码

 

注: 上面的代码有一点小的瑕疵,如果数组中两个不同的元素出现的次数一样多,结果只会体现第一次遇见的次数最多的                   元素,和它次数一样多的其他元素会被忽略掉。

 

改进方案代码如下:

复制代码
function maxCountElement(arr) {  
   var obj={};
   for(var i=0;i<arr.length;i++){  
       var key=arr[i];  
       if(obj[key]){
           obj[key]++;  
       }else{  
           obj[key]=1;
       }  
   }  
 
   var maxCount=0;
   var maxElement=arr[0];
   var eq = [];
   for(var key in obj){  
       if(maxCount < obj[key]){  
           maxCount=obj[key]; 
           maxElement=key;  
           eq.length=0;
       }else if(maxCount === obj[key]){  
           eq.push(key);
       }
   }  
   if(eq.length > 0){
       for(var j=0;j<eq.length;j++){
       maxElement+=','+eq[j];
       }
   }
   return "该数组中出现次数最多的元素:"+maxElement+"-----出现了:"+maxCount+"次";  
    }  

    var arr = [1,2,2,3,3,4,5,6];
    var res = maxCountElement(arr);

    console.log(res);
复制代码

 

posted @   smil、梵音  阅读(210)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示