· 一、选择排序思想
1.n个数进行排序,进行n-1次选择
2.每次选择
未排序数中找最小数下标,与前面的数交换位置
<script>
// 0 1 2 3 4
var arr = [89, 98, 78, 68, 76]
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]){//arr[2]<arr[1] arr[3]<arr[2] arr[4]<arr[3]
minIndex=j //minIndex:2 minIndex:3 minIndex:3
}
}
// console.log("最小数下标:",minIndex);
// 交换位置
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 .遍历原数组
方法一:
<script>
var arr = [9, 2, 5, 2, 8, 2, 5]
function testIndexOf() {
var newArr = []
for (var i = 0; i < arr.length; i++) {
// 判断新数组中是否有原数组当前元素,如果没有,存储到新数组中
// if(newArr.indexOf(9)==-1){
// newArr.push(arr[i])
// }if(newArr.includes(arr[i])==false){
// newArr.push(arr[i])
// }
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
console.log(newArr)
}
testIndexOf()
</script>
方法二 :
<script>
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()
<script>
方法三:
利用双重for循环+splice实现
外层循环遍历数组的所有元素
内层循环依次判断后面元素是否与外层元素相同,如果相同,截取掉
<script>
function test3(){
var arr = [2, 2, 2,5, 2, 8, 2, 5]
// 0 1 2 3 4 5
// [2, 2,2,5, 2, 8, 2, 5]
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1)
j--
}
}
}
console.log(arr)
}
test3()
</script>
三、字符串
数据类型
基本数据类型
1.创建字符串对象
straing
var str="helloworld"
var obj={} //字面量
var obj=new Object() //构造函数方式
var arr=[] //字面量
var arr=new Arry() //构造函数方式
<script>
var str="hellworld"
console.log(str)
var str1=new String("hellworld")
console.log(str1)
</script>
输出:hellworld
String {'hellworld'}
2.字符串是由一系列字符构成,每个字符对应自己的下标,和数组类似,从0开始
hellworld
012345678
3.访问字符串字符
str[0]
不能赋值 str[0]="k"
4.length字符串长度
<script>
var str="hellworld"
console.log("str[0]",str[0])
</script>
//输出:str[0] h
5.字符串遍历
<script>
var str="hellworld"
for(var i=0;i<str.length;i++){
console.log(str[i])
}
</script>
//输出:
h
e
l
w
o
r
l
d
6.字符串
基本数据类型
复杂数据类型(对象类型)
通过点语句调用
var str="helloworld"
str.length
当使用点语句调用属性和方法时,自动转为复杂数据类型,使用完之后又转为基本的数据类型,包装类型(面试)
var str="helloworld"
基本数据类型 复杂数据类型
string -> String
str.length
number -> Number
89.888 num.toFixed(2)
boolean Boolean
7.常用方法
charat
=>通过下标返回字符
<script>
var str="hellworld"
console.log("str.charat(0)",str.charat(0))
console.log(str.length)
</script>
//输出:str.charat(0) h
9
indexOf
=>返回字符在字符串中的下标
=>如果字符不存在,返回-1
lastIndexOf
=>
<script>
var str="hellworld"
console.log("str.indexOf:",str.indexOf("l"))
console.log("str.lastIndexOf:",str.lastIndexOf("l"))
</script>
substring slice
=>开始下标,结束下标(不包)
<script>
var str="hellworld"
console.log("substring",str.substring(1,3))
var arr=["h","e","l","l","o","w","o","r","l","d"]
var newArr=arr.slice(1,3)
console.log("newArr:",newArr)
</script>
substr splice
=>开始下标,元素个数
<script>
var str="hellworld"
console.log("substr:",str.substr(1,3))
var newArr1=arr.splice(1,3)
console.log("splice:",arr,"newArr1",newArr1)
</script>
四、字符串常用的方法
<script>
// ======replace:用于在字符串中用一些字符替换另一些字符=========
function testReplace() {
var str = "helloworld"
var newStr = str.replace("helloworld", "javaScript")//把javascript换成hellworld
console.log("newStr:", newStr);//=>newStr: javaScript
}
// testReplace()
//=======split :分割字符串,将分割之后的字符存入数组返回===========
function testSplit() {
var str = "javascript-css-html"
var arr = str.split("-")//有"-"就进行分割
console.log(arr)//=>['javascript', 'css', 'html']
}
// testSplit()
function testSplitTwo() {
var str = "javascriptMMcssMMhtml"
var arr = str.split("MM")//有"MM"就进行分割
console.log(arr)// ['javascript', 'css', 'html']
}
// testSplitTwo()
function testSplitThree() {
var str = "javascript"
var arr = str.split("")//单个输出
console.log(arr)//['j', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't']
}
// testSplitThree()
// concat(): 连接两个字符串,返回连接之后的字符串
function testConcat() {
var str = "hello"
var newStr = str.concat('world')//连接两个字符串
console.log(newStr)//helloworld
}
// testConcat()
/*
trim()
=> 方法删除字符串两端的空白符
=> 返回去掉空格的新字符
*/
function testTrim() {
var str = " jack "
console.log("str:", str.length)
var newStr = str.trim()
console.log("newStr:", newStr.length)//str: 8 newStr: 4
}
// testTrim()
//
function testStartsWith() {
var str = "hellworld"
var isOk = str.startsWith("hello")
console.log("isOk", isOk) //isOk false
}
// testStartsWith()
// 判断URL地址是以什么开头的
function testStartsWithTwo() {
var url = 'http://www.qianfeng.com'
var isOk = url.startsWith('http')
console.log('isOk ', isOk)//isOk true
}
// testStartsWithTwo()
//判URL地址以什么结尾的
function testEndsWith() {
var url = 'http://www.qianfeng.com'
var isOk = url.endsWith('.cn')
console.log('isOk ', isOk);//isOk false
}
// testEndsWith()
// 小写转大写
function testLowerCase() {
// var str = 'HELLO'
var str = 'div'
// var newStr = str.toLowerCase()
var newStr = str.toupperCase()
console.log(newStr)//DIV
}
testLowerCase()
</script>
五、字符串案例
1.反转字符
分析:"abcdefg"=>"gfedcba"
["a","b","c","d","e","f","g"]
字符串=>数组
"abcdefg"=> ["a","b","c","d","e","f","g"]
数组=>字符串
arr.join("")
方法2:
倒序输出字符
拼接字符串
<script>
function testReverse() {
var str = "abcdefg"
var newArr = str.split("")//将str转换成数组
var newStr = newArr.reverse()//在将数组反转
var newLastStr = newStr.join()//将反转之后的数组连接起来
console.log(newLastStr) //g,f,e,d,c,b,a
}
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]
}
console.log(newStr)//g,f,e,d,c,b,a
}
testReverseTwo()
</script>
2.替换字符串
应用:敏感词忽略
已知字符串 'abcefMMaveqeripMMaeererMMda' 替换大字MM为*号 'abcef**aveqeriP**aeerer**da'
<script>
function testReplace() {
var str = 'abcefMMaveqeripMMaeererMMda'
while (str.indexOf("MM") !== -1) {
str = str.replace("MM", "**")//只替换其中一个
}
console.log("newStr", str)
}
testReplace()
function testReplaceTwo() {
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)
}
testReplaceTwo()
</script>
3.字符串分割,不使用split
思路
初始化空数组
初始化空字符串
循环遍历字符串
判断字符是否是"-"
如果不是"-"
拼接字符串 "" ->"javascript"
如果是“-”
将拼接的字符串 存储到数组中
重置拼接字符
<script>
function testSplit() {
var str = 'html-css-javascript'
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 = ""
}
} if (i == str.length - 1 && line != "") { //line != ""才将JavaScript放入arr数组中
arr.push(line)
line = ""
}
}
console.log(arr)
}
testSplit()
</script>