选择排序 数组去重 字符串

选择排序

思想

1. n 个数 进行n-1次选择

2. 每次选择

未排序数中找最小数下标,与前面的数交换位置

<script>
			var arr = [89, 98, 78, 68, 76]
			      //    0    1   2   3  4
			var n = arr.length

			//外层循环
			for (var 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>

 数组去重

[9,2,5,2,8,2,5] -> [9,2,5,8]

          方法一: 利用indexOf或includes实现

             思路:

                1. 定义一个空数组  [] 存储去重后元素

                2. 遍历原数组

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

<script>
			/*
              利用indexOf     -1
                  includes   false
            */
			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])
					// }
					// if(newArr.includes(arr[i]) == false){
					if (!newArr.includes(arr[i])) {
						newArr.push(arr[i])
					}
				}
				console.log(newArr)
			}
			testIndexOf()
			function test2() {
				var arr = [9, 2, 5, 2, 8, 2, 5]
				var newArr = [] //存储去重后数组
				arr.forEach(function (item) {
					if (newArr.indexOf(item) == -1) {
						newArr.push(item)
					}
				})

				console.log(newArr)
			}
			test2()
            /*
              利用双重for循环+splice实现
                 外层循环遍历数组所有元素
                    内层循环依次判断后面元素是否与外层循环元素相同,如果相同,截取掉
            
            */
			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.  创建字符串对象

               

            var str = 'helloworld'

            var str = new String('hellworld')

             ===========================

             var obj = {}   // 字面量

             var obj = new Object()  //构造函数方式

             var arr = []   //字面量

             var arr = new Array()  //构造函数方式

        2. 字符串是由一系列字符构成,每个字符对应自己下标,和数组类似,从0开始

             helloworld

             0123456789

        3. 访问字符串字符

             str[0]

             不能赋值  str[0] = 'k'

        4. length字符串长度

       

        5. 字符串遍历

        6. 字符串

             基本数据类型?

             复杂数据类型(对象类型)

                属性和方法

                通过点语句调用

             

             var str = 'hellworld'

             str.length

           

             当使用点语句调用属性和方法时,自动转为复杂数据类型,使用完又转为基本数据类型: 包装类型

             var str = 'hellworld'  

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

             string      ->           String  

                        str.length

             number      ->         Number

             89.888888   ->        num.toFixed(2)

             boolean     ->          Boolean

        7. 常用方法

            charAt

              =>根据下标返回字符

            indexOf

              =>返回字符在字符串中的下标

              =>如果字符不存在,返回-1

            lastIndexOf

              =>

            substring     slice

              =>开始下标,结束下标(不包)

            substr        splice

              =>开始下标,元素个数

var str = 'hellworld'   // 字面量方式
        //         012345678
        console.log(str)

        // var str1 = new String('helloworld')  // 构造函数方式
        // console.log(str1)

        console.log('str[0]  ',str[0])
        console.log('str.charAt(0) ',str.charAt(0))

        console.log( str.length )

        for(var i = 0; i < str.length; i++){
            // console.log(str[i])
        }

        // =======indexof===========
        console.log('str.indexOf :',str.indexOf('l'))
        console.log('str.lastIndexOf :',str.lastIndexOf('l'))

        //=========substring======
        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)

        // ==========substr===========
        console.log('substr :', str.substr(1,3))
        var newArr1 = arr.splice(1,3)
        console.log( 'splice :',  arr ,'newArr1 ', newArr1)

字符串的常用方法

 replace(原字符串,新字符串)

           =>返回新字符串

        split('分割字符')

           =>返回数组

 // ======replace=========
         function testReplace(){
             var str = 'helloworld'
             var newStr = str.replace('hello','javascript')  // javascriptworld
             console.log('newStr :',newStr);
         }
        //=======split===========
        function testSplit(){
            var str = 'javascript-css-html'  // => ['javascript','css','html']
            var arr = str.split('-')
            console.log(arr)
        }
        // testSplit()
        function testSplitTwo(){
            var str = 'javascript1MMcss1MMhtml1' // =>  ['javascript','css','html']
            var arr = str.split('MM')
            console.log(arr)
        }
        // testSplitTwo()
        function testSplitThree(){
            var str = 'javascript'  // =>['j','a','v','a','s','c','r','i','p','t']
            var arr = str.split('')
            console.log(arr)
        }
        // testSplitThree()

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

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

        function testStartsWith(){
            var str = 'helloworld'
            var isOk = str.startsWith('hello')
            console.log('isOk ',isOk)
        }
        // testStartsWith()
        function testStartsWithTwo(){
            var url = 'http://www.qianfeng.com'
            var isOk = url.startsWith('http')
            console.log('isOk ',isOk)
        }
        // testStartsWithTwo()
        function testEndWith(){
            var url = 'http://www.qianfeng.com'
            var isOk = url.endsWith('.cn')
            console.log('isOk ',isOk);
        }
        // testEndWith()
        function testLowerCase(){
            // var str = 'HELLO'
            var str = 'div'
            // var newStr = str.toLowerCase()
            var newStr = str.toUpperCase()
            console.log(newStr)
        }
        testLowerCase()

字符串练习

反转字符

                分析: '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'
            var arr = str.split('') //字符串转数组
            var newstr = arr.reverse() //反转
            var news = newstr.join('') //数组转字符串
            console.log(news);
        }
        testReverse()

        function testReverseT() {
            var str = 'abcdefg'
            var newstr = ''
            for (var i = str.length - 1; i >= 0; i--) {
                // console.log(str[i]);
                newstr = newstr + str[i]
            }
            console.log(newstr);
        }
        testReverseT()
        /*
           替换字符串
        */
        function testReplace() {
            var str = 'abcedfdMMefallMMaefeafMMopqrst' // => abcedfd**efall**aefeaf**opqrst
            //   console.log(str.replace(/M/g,'*'));
            while (str.indexOf('MM') != -1) {
                str = str.replace('MM', '**')
            }
            console.log(str);
        }
        testReplace()

        /*
           字符串分割
            不使用split
        */
        function testSplit() {
            var str = 'javascript-html-css' // => ['javascript','css','html']
            // var s = str.substr(0, 10)
            // var t = str.substr(11, 4)
            // var r = str.substr(16, 3)
            // console.log(s, t, r);
            var line = ''//拼接字符串
            var arr=[]//储存分割内容
            for (var i = 0;i<str.length;i++){
                var chars = str.charAt(i)
                if(chars != '-'){
                    line = line+chars
                }else{
                    if(line !=''){
                        arr.push(line)
                        line=''
                    }
                }
            }
            console.log(arr);
        }
        testSplit()
    </script>
<script>
			/*
               反转字符
                分析: 'abcdefg' => 'gfedcba'
                    ['a','b','c','d','e','f','g']  => arr.reverse()
                    字符串=>数组
                    'abcdefg' => ['a','b','c','d','e','f','g'] 
                    数组 =>字符串
                    arr.join('')

                方法二: 
                    倒序输出字符
                    拼接字符串
            */
			function testReverse() {
				var str = 'abcdefg' // => gfedcba

				var arr = str.split('') //  ['a','b','c','d','e','f','g']
				var arr1 = arr.reverse() // 反转 ['g','f','e','d','c','b','a']
				var str1 = arr1.join('') // 'gfedcba'
				console.log(str1)
			}
			// testReverse()
			function testReverseTwo() {
				var str = 'abcdefg'
				var newStr = ''
				for (var i = str.length - 1; i >= 0; i--) {
					console.log(str[i])
					newStr = newStr + str[i] // 'gfedcba'
				}
				console.log(newStr)
			}
			// testReverseTwo()

			/*
             替换字符串
                敏感词过滤
            */
			function testReplace() {
				var str = 'abcedfdMMefallMMaefeafMMopqrst' // => abcedfd**efall**aefeaf**opqrst
				var newStr = str.split('MM') // ['abcedfd','efall','aefeaf','opqrst']
				var newStr1 = newStr.join('**') // 'abcedfd**efall**aefeaf**opqrst'
				console.log(newStr1)
			}
			// testReplace()
			function testReplaceTwo() {
				var str = 'abcedfdMMefallMMaefeafMMopqrst'
				// var newStr = str.replace('MM','**')
				// console.log(newStr) //abcedfd**efallMMaefeafMMopqrst

				// newStr = newStr.replace('MM','**')
				// console.log(newStr) //abcedfd**efall**aefeafMMopqrst

				// newStr = newStr.replace('MM','**')
				// console.log(newStr)

				// 判断子字符串是否在原字符串中
				while (str.indexOf('MM') != -1) {
					str = str.replace('MM', '**') //str = 'abcedfd**efall**aefeafMMopqrst'
				}
				console.log(str)
			}
			testReplaceTwo()

			/*
                字符串分割
                   不使用split
                编程思想:  
                    初始化空数组
                    初始化空字符串

                    循环遍历字符串
                    判断字符是否是'-'
                        如果不是'-' 
                        拼接字符串  '' -> 'javascript'
                        如果是'-'
                        将拼接的字符串 存储到数组中
                        重置拼接字符串

            */
			function testSplit() {
				var str = 'javascript-html-css' // => ['javascript','css','html']
				// var str1 = str.substr(0, 10)
				// var str2 = str.substr(11, 4)
				// var str3 = str.substr(16, 3)

				// var newStr = []
				// newStr.push(str1, str2, str3)
				// console.log(newStr)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值