js第七天


前言

今天主要学习了选择排序,以及数组去重的三种方法,字符串常用的方法以及一些锻炼我们思维能力的案例,今天认识到字符串不只是基本数据类型,还可以为复杂数据类型...

一、选择排序

选择排序:在需要排序的序列中,找到最小(大)元素,存放到排序序列的起始位置,(交换位置)

再从剩余排序元素中继续寻找最小(大)元素,放到序列末尾

重复以上步骤,最后排序完成

n个数 要进行n-1次排序

每次选择:未排序数列中找最小数下标,与前面的数交换

代码如下(示例): 

<script>
    //   n个数 进行n-1次选择

     var arr=[98,67,54,73,86]
     var n=arr.length
    for(i=0;i<n-1;i++){ //外层循环 选择的次数
        var minIndex = i
    
        for(var j=i+1;j<n;j++){
            if(arr[j] < arr[minIndex]){   //寻找最小数的下标
                minIndex=j
            }
        }
            //交换位置
           var temp=arr[i]
           arr[i] =arr[minIndex]
           arr[minIndex]=temp
        
        console.log('第'+(i+1)+'次选择',arr);

    }
    console.log(arr)
  </script>


二、数组去重(把数组中相同重复的元素给去掉)

1.利用forEach遍历数组,arr.includes判断剔除,push方法添加元素

代码如下(示例): 

<script>

        var arr=[9,2,5,2,8,2,5]
        var newArr=[]
        arr.forEach(function(item,index){
            var a=newArr.includes(item)
            if(a==false){
                newArr.push(item)
            }
        })
        console.log(newArr)   //输出为[9,2,5,8]
 
    </script>

2.利用indexOf或includes实现

思路:

             ①定义一个空数组 newarr[] 存储去重后的元素

             ②遍历数组

             ③判断新数组中是否有原数组当前元素,如果没有,存储到新数组中

 代码如下(示例): 

<script>
  function testIndexOf() {
				var arr = [9, 2, 5, 2, 8, 2, 5]
				var newArr = [] //1.存储去重后元素
				// 2. 遍历原数组
				for (var i = 0; i < arr.length; i++) {
					// 3. 判断新数组中是否有原数组当前元素,如果没有,存储到新数组中
					/* if(newArr.indexOf(arr[i]) == -1){
					     newArr.push(arr[i])
					 }*/   //indexOf方法
					
					if (!newArr.includes(arr[i])) {
						newArr.push(arr[i])
					}
				}
				console.log(newArr)
			}

</script>

3.利用双重for循环+splice实现

1.外层循环遍历数组所有元素

2.内层循环依次判断后面元素是否与外层循环元素相同,如果相同,就截取

  代码如下(示例): 

<script>
function test3() {
				var arr = [2, 2, 2, 5, 2, 8, 2, 5]
                  //       0  1  2  3  4  5
                 //       [2, 2, 5, 2, 8, 2, 5]
                  //             2
				for (var i = 0; i < arr.length; i++) {
                    var item = arr[i] // 外层循环元素

					for (var j = i + 1; j < arr.length; j++) {
                        if(item == arr[j]){
                            arr.splice(j,1)
                            j--
                        }
                    }
				}
                console.log(arr)
			}
            test3()
</script>


三、字符串

1.字符串相关知识

(1)创建字符串的方式:与对象,数组类似

  ①字面量方式

   var str='helloword'

②构造函数方式

var str = new string('helloword')

 (2字符串是由一系列字符构成,每个字符对应之间的下标,和数组类似,从0开始

helloworld

0123456...

(3)访问字符串字符

 var str='helloword'

str[下标]  

注意:可以访问,但不能赋值,str[0]='k'

(4)length字符串长度

str.length 

注意:空字符也算一个字符

(5)字符串遍历

for(var i=0;i<str.length;i++){

console.log( str[i] )

}

(6)数据类型(重要)

1.属于基本数据类型

2.属于复杂数据类型(对象类型),有属性和方法,通过点语句调用

eg:var str='helloword'

str.length 

包装数据类型:原本是基本数据类型,当使用点语句调用属性和方法时,自动转为复杂数据类型,使用完自动转回基本数据类型。字符串,数值,布尔类型都属于包装数据类型

基本数据类型        ----------------------------------------->复杂数据类型

      string                                                                       String    eg:str.length

      number                                                                    Number  eg:89.9909  num.toFixed(2)

      boolean                                                                    Boolean


2.字符串常用方法

(1)charAt(索引)   

找到字符串中指定索引位置的内容返回,如果没有对应的索引号,就返回空字符串''

var str='helloword'
 console.log(str.charAt(0))    //输出为h

  代码如下(示例): 

<script>

 var str = 'hellworld'   // 字面量方式
  console.log('str[0]  ',str[0])       //str[0] 输出为h
  console.log('str.charAt(0) ',str.charAt(0))   //str.charAt(0) 输出为h


</script>

 (2)indexOf 和lastIndexOf

indexOf 和lastIndexOf都是按照字符串找到对应的索引返回下标,如果字符不存在返回-1;区别是indexOf是从左往右查找,lastIndexOf从右往左查找

str.indexOf('需要查找的字符')

str.lastIndexOf('需要查找的字符')sub

 代码如下(示例):  

<script>

 var str = 'hellworld'   // 字面量方式
  console.log('str.indexOf :',str.indexOf('l'))  
  console.log('str.lastIndexOf :',str.lastIndexOf('l'))

</script>

(3)substring 

用于截取字符串,包含开始索引,不包含结束索引

str.substring(开始索引,结束索引)

 代码如下(示例):  

<script>

 var str = 'hellworld'   // 字面量方式
  console.log( 'substring ', str.substring(1,3)  )
        var arr = ['h','e','l','l','w','o','r','l','d']
        var newArr = arr.slice(1,3)
        console.log('newArr :', newArr)

</script>

(4)substr

用于截取字符串,与substring不同的是第二个参数为要截取的个数

str.substr(开始索引,截取的个数)

 代码如下(示例):  

<script>

       var str = 'hellworld'   // 字面量方式
        console.log('substr :', str.substr(1,3))
        var newArr1 = arr.splice(1,3)
        console.log( 'splice :',  arr ,'newArr1 ', newArr1)


</script>

(5)replace

用于字符串中用一些字符替换另一些字符,替换后,返回新字符串

str.replace('需要替换的字符','替换后的字符'

 代码如下(示例):  

<script>

      function testReplace(){
             var str = 'helloworld'
             var newStr = str.replace('hello','javascript')  // javascriptworld
             console.log('newStr :',newStr);
         }
     testReplace()

</script>

(6)split

分割字符串,将分割后的字符存入数组返回

str.split('分隔符')

 代码如下(示例):  

<script>

       function testSplit(){
            var str = 'javascript-css-html'  // => ['javascript','css','html']
            var arr = str.split('-')
            console.log(arr)
        }
         testSplit()

</script>

(7)concat  

用于拼接两个字符串,返回连接后的字符串

str.concat('拼接字符')

 代码如下(示例):  

<script>

       function testConcat(){
            var str = 'hello'
            var newStr = str.concat('world')
            console.log(newStr)
        }
         testConcat()

</script>

(8)trim

删除字符串两端的空白,返回去掉空格的字符串

str.trim()

 代码如下(示例):  

<script>

       function testTrim(){
            var str = '  jack  '
            console.log('str : ',str.length)
            var newStr = str.trim()
            console.log('newStr :',newStr.length)
        }
         testTrim()

</script>

(9)stratsWith &&  endsWith

在项目中多用于判断域名

① stratsWith   ----->  判断字符是否以子字符串开始

                                 是  返回true    ;不是  返回false

str.stratsWith(子字符串)

②endsWith   ------>判断字符是否以子字符串结尾

                                  是  返回true    ;不是  返回false

str.endsWith(子字符串)

 代码如下(示例):  

<script>

      function testStartsWith(){
            var url = 'http://www.qianfeng.com'
            var isOk = url.startsWith('http')
            console.log('isOk ',isOk)
        }
         testStartsWith()

</script>
<script>

function testEndWith(){
            var url = 'http://www.qianfeng.com'
            var isOk = url.endsWith('.cn')
            console.log('isOk ',isOk);
        }
         testEndWith()

</script>

(10)toLowerCase   && toUpperCase

用于英文大小写转换

str.toLowerCase()    将原字符串转为小写

str.toUpperCase()    将原字符串转为大写


四、案例

1.反转字符串

 方法一

        分析: 'abcdefg' => 'gfedcba'

                ['a','b','c','d','e','f','g']  => arr.reverse()

                字符串=>数组

                'abcdefg' => ['a','b','c','d','e','f','g']

                数组 =>字符串

                arr.join('')

 代码如下(示例):  

<script>

function testReverse() {
            var str = 'abcdefg' // => gfedcba


            var arr = str.split('')
            var arr1 = arr.reverse()
            var str1 = arr1.join('')
            console.log(str1)
        }
        testReverse()

</script>

方法二:

            倒序输出字符

             拼接字符串

 代码如下(示例):  

<script>

 function testReverse2() {
            var str = 'abcdefg'
            var newStr = ''
            for (i = str.length - 1; i >= 0; i--) {
                newStr = newStr + str[i]
            }
            console.log(str)

            console.log(newStr)
        }
        testReverse2()

</script>

2.替换字符串,敏感词过滤

 代码如下(示例): (方法一)

<script>

 //'abcedfdMMefallMMaefeafMMopqrst' => abcedfd**efall**aefeaf**opqrst
        function testReplace() {
            var str = 'abcedfdMMefallMMaefeafMMopqrst' // => abcedfd**efall**aefeaf**opqrst
            while(str.indexOf('MM') !=-1){
                str = str.replace('MM', '**')
            }
            console.log(str)
        }
        testReplace()

</script>

 代码如下(示例): (方法二)

<script>


        function testReplace2() {
            var str = 'abcedfdMMefallMMaefeafMMopqrst' // => abcedfd**efall**aefeaf**opqrst
            var newStr=str.split('MM')
            newStr=newStr.join('**')
            console.log(newStr)
        }
        testReplace2()


</script>

3.字符串分割(不使用split)

 代码如下(示例): 

<script>

 function testSplit() {
            var str = 'javascript-html-css' 
            var line=''   //拼接字符串
            var arr=[]    //存储分割内容
            for(i=0;i<str.length;i++){
               var chars=str.charAt(i)
               if(chars != '-'){
                line=line+charst
               }else{
                if(line != ''){
                    arr.push(line)
                    line=''
                }
               }
               // 将最后的line存储到数组
               if(i==str.length-1 && line!=''){
                arr.push(line)
                line=''

               }
                
            }
            console.log(arr)
        }
        testSplit()


</script>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340