7day

140 阅读4分钟

一 . 算法之数组去重

方法一:

【简单思路实现】:依次拿出数组的中的每一项,和后面的所有项进行比较,如果有相同的就删除

var ary=[1,2,3,2,4];
/* 
思路:
第一次:
   拿出数组的第一项:1
                 给[2,3,2,4]进行比较,如果有重复就删除
   拿出数组的第二项:2   
                   ====[3,2,4]进行比较,有重复的删除 [3,4]  
   拿出数组的第三项:3
                   ===4 进行比较,有重复的删除,没有重复
   还用拿最后一项4吗?====不用了                                     
依次拿出数组中的每一项给剩余的所有项进行比较

//思路:拿出数据每一项和后面的每一项对比

        var ary = [1, 1, 2, 3, 1, 2, 4, 5, 5]
        function noRepeat (ary) {
            for (var i = 0; i < ary.length - 1; i++) {
                //拿出这一项数据
                var currentItem = ary[i];
                for (var j = i + 1; j < ary.length; j++) {
                    //拿出后面的每一项数据
                    var haha = ary[j];
                    if (currentItem == haha) {
                        ary.splice(j, 1);
                        j--;//解决数据塌陷问题
                    }
                }
            }
            return ary;
        }
        var res = noRepeat(ary);
        console.log(res);

方法二:

【实现的思路】利用对象属性名不重复的思想,先建立一个空对象,然后依次循环数组中的每一项,把此项作为obj对象的属性名和属性值,在添加的时候,如果这个属性名对应的值已经存在,说明此项重复,删除掉此项

/* 
var ary2=[1,2,1,3,3,2,3];

利用对象属性名不能重复的原理:对象中如果没有一个属性的时候就是undefined
把数组中的每一项作为一个对象的属性名和属性值
var obj={1:1,2:2,3:3} 
原理:如果对象属性中已经存在这个属性名,我们就把原数组中此项进行删除
*/
function unique(ary){
   var obj={};
   for(var i=0;i<ary.length;i++){
       var item=ary[i];
       if(typeof (obj[item])!="undefined"){
         //如果此时对象的此属性已经有了,我们就应该删除数组中的那一项
         ary.splice(i,1);
         i--;
         continue;
       }
       obj[item]=item;
   }
   return ary;
}

var ary2=[1,2,1,3,3,2,3];
var res=unique(ary2);
console.log(res);



方法三:indexOf

创建一个新数组,遍历原数组,如果新数组中没有那一项的话,就把它push进去

/* 
  var ary2=[1,2,1,3,3,2,3];
  var newAry=[];
  把原数组中的每一项,只要在新数组中没存在过,我们就把它放进去,最后newAry就是咱们最终要的数组
*/

function unique(ary){
   var newAry=[];
   for(var i=0;i<ary.length;i++){
       var item=ary[i];
       if(newAry.indexOf(item)==-1){
        newAry.push(item);
       }
   }
   return newAry;
}
var ary2=[1,2,1,3,3,2,3];
var res=unique(ary2);
console.log(res);

算法之冒泡排序

   /* 
   冒泡排序:
   从小到大排序
   var ary=[8,2,1,5]
   原理:依次拿出数组中的每一项给后面的一项做对比,如果当前项比后面的项大就交换位置
   第一轮:[2,1,5,8] 经过一轮比较出现了最大数
   第二轮:[1,5,2,8] 经过二轮比较得出倒数第2个数
   第三轮:[1,5,2,8]  经过二轮比较得出倒数第3个数
   .... 总共四项,经过比三轮,已经得到了三个最大数了,最后一个自然就是最小数
   【需要比的总轮数】:ary.length-1;
   【每次需要比的次数】:ary.length-1-已经比较过的轮数

   第一轮:4项两两比较需要比3次:ary.length-1
   第二轮: 正常的ary.length-1-已经比较过的轮数
   
   */

   function sort(ary){
       // 需要比较的轮数
       for(var i=0;i<ary.length-1;i++){
           for(var j=0;j<ary.length-1-i;j++){
              var current=ary[j];
              var next=ary[j+1];
              if(ary[j]>ary[j+1]){
                 // 让 ary[j]=ary[j+1]
                 var temp=ary[j]
                 ary[j]=ary[j+1];
                 ary[j+1]=temp;
                    
              }
           }
       }
       return ary;
   }

   var ary=[8,2,1,5];
   var res=sort(ary);

字符串方法

1.charAt

通过下标去取值

var str = 'chengxiaohui';
// 通过下标取值
var res = str.charAt(0);//"c"
// 如果找不到,返回值是空串
var res2 = str.charAt(12);//""
// 如果直接是索引去取值,找不到,返回是undefined
var res3 = str[12];//undefined

2、charCodeAt

通过下标取值对应的ascii码值

var str = 'chengxiaohui';
// 通过下标取值
var res = str.charCodeAt(0);//99   "c"==>ASCII码
console.log(res);//99

3、indexOf/lastIndexOf

第一个参数:找的内容

第二个参数:开始找的位置(indexOf)/找到哪终止(lastIndexOf)

一个参数情况下 indexof

var str = 'chengxiaohui';
// 一个参数,在整个字符串中找
var res = str.indexOf("x");
// 返回值是找到的下标
console.log(res);//5  

lastindexof

var str = 'chengxiaohui';
// 一个参数,在整个字符串中找最后一次出现的下标
var res = str.lastIndexOf("h");
// 返回值是找到的下标
console.log(res);//9 

两个参数情况下 indexof

var str = 'chengxiaohui';
// 从下标5开始找,找"h"
var res = str.indexOf("h",5);
// 返回值是找到的下标
console.log(res);//9 

lastindexof

var str = 'chengxiaohui';
// 截止到下标5,找"h"
var res = str.lastIndexOf("h",5);
// 返回值是找到的下标
console.log(res);//1  

4、slice

作用:查找字符串中特定位置的字符

参数:(n,m)

n:起始索引(包含), m结束索引(不包含)

返回值:查找的字符

  • 从索引n(包括)开始查找到索引m(不包含)结束的字符
  • 如果索引m不写,就是查找到最后
  • 如果n只写一个0,或者不写就是复制一份
  • 也可以为负数,转换成正数的规律:str.length+负的索引值
var str="zhufengpeixun"

str.slice(1,3)    ===>"hu"

str.slice(0)      ===>复制一份
str.slice()       ===>复制一份 


var res=str.slice(-3,-1);   ===>“xu” 

4.1、substring(n,m)

 subString  和slice 基本都一样,唯一不同在于,subString 不支持负数索引,而slice支持负数索引

@4.2、substr(n,m)

  • 作用:从索引n开始截取m个字符
  • 参数:n,m(个数)
  • 返回值:截取的字符串
  • 也支持从负索引开始
var str="zhufengu";

var res=str.substr(-3,2);  ====>"ng"

toUpperCase()

toUpperCase(); 把字符串转换为大写

@6、 toLowerCase()

toLowerCase(); 把字符串转换为小写

@7、 replace()

  • 作用:把字符串中某部分的字符替换成另一部分字符
  • 参数:(str1,str2)第一个参数代表的是要替换的字符或者是正则;第二个参数代表的是替换后的字符
  • 返回值:替换后的字符串
var str="zhufeng2018zhufeng2019zhufeng";

var res=str.replace("zhufeng","珠峰");   
//===>"珠峰2018zhufeng2019zhufeng"

var res=str.replace(/zhufeng/g,"珠峰");

console.log(res)===>"珠峰2018珠峰2019珠峰"

8、split()

  • 作用:按照指定的字符把字符串分割成数组
  • 参数:分割符
  • 返回值:分割后的数组

split  和 join 对比记忆

 var str="1-2-3";

 var res=str.split("-");
 
 console.log(res); ===>  ["1", "2", "3"]

练习题

【时间字符串处理】把下面的字符串变成 "2019年08月18日 12时32分18秒"

var str="2019-8-18 12:32:18";
//var res=str.split(/-| |:/g)

var time=str.split(" ");
console.log(time) //["2019-8-18", "12:32:18"]
var timeLeft=time[0];
var timeRight=time[1];
var ary1=timeLeft.split("-"); // ["2019", "8", "18"]
var ary2=timeRight.split(":");// ["12", "32", "18"]

var result=ary1[0]+"年"+ary1[1]+"月"+ary1[2]+"日"+" "+ary2[0]+"时"+ary2[1]+"分"+ary2[2]+"秒" 
console.log(result) //"2019年8月18日 12时32分18秒"

/* 
  补零
*/


function zero(num){
    return num<10?"0"+num:num;
}
var ss=zero(11);

var result=zero(ary1[0])+"年"+zero(ary1[1])+"月"+zero(ary1[2])+"日"+" "+zero(ary2[0])+"时"+zero(ary2[1])+"分"+zero(ary2[2])+"秒" 

//"2019年08月18日 12时32分18秒"

queryURLParams 问号参数处理

 /* 
        var  str ="https://www.baidu.com?name=zhufeng&age=10&id=14";
        {
            name:"zhufeng",
            age:10,
            id:14
        }
       */


      function urlParams(str){
          var obj={};
          var paramsStr=str.split("?")[1];
          if(paramsStr){
              //[name=zhufeng,age=10,id=14]
              var paramsAry=paramsStr.split("&");
              for(var i=0;i<paramsAry.length;i++){
                    //name=zhufeng
                   var item=paramsAry[i];
                   //[name,zhufeng]
                   var itemAry=item.split("=");
                   obj[itemAry[0]]=itemAry[1];
              }
          }
          return obj;
      }
      var  str ="https://www.baidu.com?name=zhufeng&age=10&id=14";
      var result= urlParams(str);