前言
今天主要学习了选择排序,以及数组去重的三种方法,字符串常用的方法以及一些锻炼我们思维能力的案例,今天认识到字符串不只是基本数据类型,还可以为复杂数据类型...
一、选择排序
选择排序:在需要排序的序列中,找到最小(大)元素,存放到排序序列的起始位置,(交换位置)
再从剩余排序元素中继续寻找最小(大)元素,放到序列末尾
重复以上步骤,最后排序完成
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>