冒泡排序、数组去重、判断每个值在数组中出现的次数。。

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

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

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

一、冒泡排序

//冒泡排序:
    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}





原文地址:https://www.cnblogs.com/shengmo/p/8660791.html