zoukankan      html  css  js  c++  java
  • 冒泡排序、数组去重、判断每个值在数组中出现的次数。。

    莫愁前路无知己,天下谁人不识君--- 唐.高适《别董大二首》

    本文的数组排序,数组去重,判断出现的次数,都不使用数组的方法。

    具体的流程思想在代码注释中

    一、冒泡排序

    //冒泡排序:
        var arr = [1,2,3,5,4];
        var j,temp,flag;
        var count = 0;//用于记录比较的轮数
        //外层循环控制比较的趟数
        //使用假设成立法:(使用变量标记的方式)
        //1 找到程序中不确定的操作,设置假设条件
        //2 对假设条件进行验证(设置一个可以使假设失败的条件)
        //3 对假设条件的最终值进行检测,设置操作
        for(var i = 0;i < arr.length - 1; i++){
          count++;
          flag true;//假设本轮执行排序后可以跳出
          for(j = 0; j < arr.length - 1 - i; j++){
            if(arr[j] > arr[j+1]){
              temp = arr[j];
              arr[j] = arr[j+1];
              arr[j+1] = temp;
              //只要进入到if中,说明排序可能没有完毕,设置假设条件为false
              //阻止跳出
              flag = false;
            }
          }
            if(flag){
            break;
          }
        }
        console.log(arr,count);

    一、数组去重

    //数组去重:
        var arr = [5,1,2,1,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1];
        //希望得到的结果为[1,2,3,4,5]
        //1 创建一个结果数组
        var resultArr = [arr[0]];
        var flag;
        //2 遍历数组
        for(var i = 1; i < arr.length; i++){
          // 正确的实现方式
          flag = true;//假设当前arr[i]可以放入到resultArr中
          for(j = 0; j < resultArr.length; j++){
            //设置可以让假设失败的条件:如果偶遇任何一个元素相等,即说明不能放入
            if(arr[i] === resultArr[j]){
              flag false;
           }
          }
          //根据flag的值设置最终操作
          if(flag){
            resultArr.push(arr[i]);
          }
        }
        console.log(resultArr);

    简单介绍一下Set:Set是ES6中新的对象,数组去重特别方便。只需要两行代码

    //先定义一个重复的数组
    var
    arr = [1,1,2,2,2,3,3,4,4] var set = new Set(arr) // {1,2,3,4} var newArr = Array.from(set) // 再将set转变成array console.log(newArr) // [1,2,3,4]

    实现的原理:SetArray的区别在于:Array中允许出现重复的元素,例如[1,2,2,3];而Set中的所有元素都是唯一的,只能是{1,2,3}。利用这一特性,我们就可以迅速地去掉数组中重复的元素。

    三、出现的次数

     补充:第一种方法略麻烦,数组去重后,然后比较出现的次数,略麻烦已删除,推荐第二种

    第二种方法 (推荐第二种方法)

       // 先定义一个数组
       var arr=["a","a","a","a","b","b","b","c","c","c"]
    //再定义一个对象,用来保存相同的数据
        var obj={}
        for(var i=0;i<arr.length;i++){
          //将循环数组中的每个数赋值给item 作为对象中的键
          var item=arr[i]
          if(obj[item]){//这句的意思是对象中以item作为键存在吗,如果存在的话,就让这键的值再加1
            obj[item]=obj[item]+1
          }else{
            //如果不存在等于1,多次循环就可得到结果
            obj[item]=1
          }
        }
        console.log(obj)//结果:{a: 4, b: 3, c: 3}
    
    
    
    
    


  • 相关阅读:
    一句sql语句删除重复记录
    Remoting测试
    关于委托
    遍历打印文件夹中的word文档
    c# string类型的一个理解误区
    viewstate
    依赖注入与工厂模式Demo
    memcache配置实践
    201732 C#链接数据库实现登陆
    观察者设计模式[伪]
  • 原文地址:https://www.cnblogs.com/shengmo/p/8660791.html
Copyright © 2011-2022 走看看