字符串/数组方法

160 阅读7分钟

字符串方法 数组方法

字符串及字符串方法

length 返回字符个数 下标 取值

字符串 length 不可修改字符串.字符串基本只读,不可修改

es5字符串方法

charAt

获取字符串项 (参数 : 索引)

let str = "hello"
console.log(str.charAt(str.length-1)) // o
charCodeAt

返回指定位置字符串项的unicode编码 (参数 索引)

console.log(str.charCodeAt(str.length-1)) // 111
String.fromCharCode

( 参数 unicode编码 ) 通过编码返回对应字符

console.log(String.fromCharCode(111))// o字母
indexOf

( 参数 字符串内容 ) 通过字符串项 返回当前找到的第一个的 索引

如果有两个参数 第一个参数是检索的字符串项,第二个参数是从哪个位置开始检索的索引值 (找不到就返回-1)

console.log(str.indexOf("l")) // 2
console.log(str.indexOf("l",1)) // 从下标1开始检索
lastIndexOf

通过字符串项 返回当前找到的最后一个的 索引

如果有两个参数 第一个参数是检索的字符串项,第二个参数时从哪个位置结束检索的索引值 (找不到就返回-1)

console.log(str.lastIndexOf("l")) // 3
console.log(str.lastIndexOf("l", 4)) // 在下标4之前检索
//检索多字符
console.log(str.lastIndexOf("ll")) // 2 返回第一个的索引 找不到则返回 -1
substring

截取字符串 接收两个参数 1:起始位置 2:结束位置 左闭右开 返回新字符串

参数互换位置没有关系,反正也会自动识别大小

let str = "hello world"
let str1 = str.substring(6,str.length)
console.log(str1) //world 
slice

截取字符串 和substring一样 只不过不允许参数互换位置

let str = "hello world"
let str1 = str.slice(6,str.length)
console.log(str1) //world 
toLowerCase

小写转大写 不接参数 干就完了

let str = "Hello"
console.log(str.toLowerCase()) // hello
toUpperCase

大写转小写 不接参数

let str = "Hello"
console.log(str.toUpperCase()) // HELLO
split

字符串变数组 按照一定方式切割 重要

let str = "1 3 1 4"
//let arr = str.split() //不切啥 ["1 3 1 4"] 一条数据
//let arr = str.split("") //按空切  ["1", " ", "3", " ", "1", " ", "4"] 包含空格
let arr = str.split(" ") //按空格切 [1, 2, 3, 4]
let arr = str.split("3") //按3切 ["1 ", " 1 4"]
trim()

方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串。

let str = " zhuque       "
let str1 = str.trim()
console.log(str1)
match()

方法用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null

// 一般配合正则使用  后面还会提到 
let str = " zhuque112233       "
let arr = str.match("112233")
console.log(arr)  
search()

方法的用法等同于match,但是返回值为匹配的第一个位置。如果没有找到匹配,则返回-1

replace()

替换字符串 返回新字符串 多用于正则

let str = " zhuque112233       "
let str1 = str.replace("112233", "很美丽")
console.log(str1) //朱雀很美丽

数组及数组 API

es5 数组方法

length 属性

显示数组的数据个数 可使用于遍历数组数据时

let arr = ["我", "520","you"]
console.log(arr.length)//3 

可以通过改变length 而改变里面的数据

arr.length = 5;
console.log(arr) // 后面新增两条undefined数据
push 往数组最后添加数组项( 数据 )

改变原数组

return返回添加后的数据个数length

需要传参 ( 不传则认为是空 数组不添加) 可以传参多个

  let arr = [1,2,3,4,5,6,7]
  arr.push(8) //return 8
  console.log(arr) // [1,2,3,4,5,6,7,8]
  console.log(arr.push(8)) // 9  这里是添加了两次8 末尾两个8
  console.log(arr) // [1,2,3,4,5,6,7,8,8]
  arr.push("我","爱","你") //[1,2,3,4,5,6,7,8,8,"我","爱","你"]
pop 删除数组最后一项 ( 数据 )

改变原数组

return返回 移除的这条 数据 ( 如果我们又要修改数组 又需要取到数组最后一项 可以使用这个操作 )

不需要传参 ( 反正只删最后一条 不管你是谁 ) 一次删一个

let arr = [1,2,3,4,5,6,7]
console.log( arr.pop() ) // 7 返回移除的数据 7
console.log(arr) // [1, 2, 3, 4, 5, 6]  7被抛出去了 
unshift 往数组最前添加数组项 ( 数据 )

改变原数组

return 返回添加后的数据个数length

需要传参 可以传参多个

let arr = [1,2,3,4,5,6,7]
arr.unshift("我","爱","你") //return 10
console.log(arr) // ["我", "爱", "你", 1, 2, 3, 4, 5, 6, 7] 
shift 删除数组最前一项 (数据)

改变原数组

return返回 移除的这条 数据

不需要传参 ( 反正只删最前面一条 不管你是谁 ) 一次删一个

let arr = [1,2,3,4,5,6,7]
arr.shift() //return 1
console.lig(arr) // [2,3,4,5,6,7]
slice 切割数组 通过下标截取数组

返回切割的新数组 ( 变量接收下 )不改变原数组

参数 (下标/索引值 )左闭右开 左边能取到 右边取不到

只有一个参数默认这个下标开始一直到结束

let arr = [1,2,3,4,5,6,7]
let arr1 = arr.slice(4,6) //4 5 6 右开所以6取不到
console.log(arr1) // [5,6] 对应下标 4 5 
splice( index ,num ,new...) 替换

第一个参数 index => 开始替换的下标 必选

第二个参数 num => 从左至右 替换的个数 必选

后面的参数 new =>替代的新的数据 可选

返回被替换下来的数据组成的新数组 (变量接收下)

改变原数组 =>将替换上去的新内容放进去

let arr = [1,2,3,4,5,6,7]
let arr1 = arr.splice(2,3,"我","爱","你" )
console.log(arr1) // [3,4,5,] 返回的被剪下来的数组 
console.log(arr)// [1, 2, "我", "爱", "你", 6, 7] //用胶带粘上新东西的旧数组

可替代以上5种方法 一个顶 5

//push 后增
arr.splice(arr.length,0,"我")//从最后一个开始删 删0个 后面不拼接上去 数值只要大于等于arr.length-1就行  哪里剪断 哪里拼接

//pop 后减
arr.splice(arr.length-1,1) //从第一个开始删 删一个 后面不拼接上去

//unshift 前增
arr.splice(0,0,"我") //从第一个开始删 删0个 

//shift 前减
arr.splice(0,1)

//slice 切割 比如slice(3,5) 左闭右开 实际切3 4
arr.splice(3,2)
concat 数组拼接 返回拼接后的数组
let arr = ["我"]
let arr1 = ["爱"]
let arr2 = ["你"]
let arr3 = arr.concat(arr1, arr2);
// arr3 = arr.concat(["爱"], ["你"])   一样窝
console.log(arr3)
//要拼接的主体放前面 , 拼接的数组 放到方法里面
//可拼接多个数组 返回新的数组,需要变量接收
join 数组变字符串 必备

根据参数规则,返回新的字符串,不改变原数组

参数: 用什么拼接 不写,不需要拼接的,返回"1,2,3,4,5,我"

​ "" 空代替 ,

​ "+" 加代替 ,

​ " " 空格代替 ,

let arr = [1,2,3,4,5,"我"]
let str = arr.join() //"1,2,3,4,5,我"
let str1 = arr.join("") // "12345我"
let str2 = arr.join("+") // "1+2+3+4+5+我"
let str3 = arr.join(" ") // "1 2 3 4 5 我"
sort 排序

修改原数组内数据排序

此方法为底层已经定义好的,多种编程里面唯一一个底层定义好的排序方法

  // 以首字符编码顺序排序 
  let arr = [9,5,3,1,7,8,4]
  arr.sort() 
  console.log(arr) //[1, 3, 4, 5, 7, 8, 9]
  • value <= 0 首尾一一对应 对换顺序

    let arr = [9,5,3,1,7,8,4]
    arr.sort(function(a,b){
        return 2
    })
    console.log(arr) // 首尾一一对应对换顺序
    
  • value > 0 不换顺序

  • 正序 ( 冒泡排序 )

||||| a - b 由小及大 升序

  let arr = [9,5,3,1,7,8,4]
  arr.sort(function(a, b){
      return a - b;
  })
  console.log(arr) // [1, 3, 4, 5, 7, 8, 9]
  • 倒序 ( 冒泡排序 )

||||| b - a 由大及小 降序

  let arr = [9,5,3,1,7,8,4]
  arr.sort(function(a, b){
      return b - a;
  })
  console.log(arr) // [9, 8, 7, 5, 4, 3, 1]
  • 特殊情况 字符串等
  let arr = ['c','b','a'];
  arr.sort(function(a,b){
    	return b-a;
  });
  console.log( arr );   //不会进行排序!字符串方面的排列,很是奇怪!
  • reverse 倒序 (改变原数组)

    let arr = ["我","爱","你"]
    arr.reverse()
    console.log(arr)//["你","爱"."我"]
    

es6数组方法

forEach() 遍历数组

必须接收一个回调函数参数

let arr = [9,5,3,1,7,8,4,0]
arr.forEach((a,b,c) =>{console.log(a,b,c)});
//输出 参数  第一个 数组项  第二个 序号  第三个 原数组
// 修改回调函数this指向参数 
let data = {
    user: ["乌拉","心艾"],
    fn: function (user){
        user === "乌拉"? console.log("美女" + user) : console.log("小可爱" + user)
        console.log(this) //修改回调函数this指向 ,默认指向window 现在指向 data对象
    }
}
data.user.forEach(data.fn, data);
map

映射 和forEach类似 , 会遍历数组项 并映射返回一个新的数组

let arr = [1,2,3]
let arr1 = arr.map(val => value + 1)
console.log(arr1)//[2,3,4] //返回一个新数组

forEach替代写法
let arr = [1,2,3]
let arr1 = []
arr.forEach((value, index) =>{
    value ++
    arr1[index] = value
})
console.log(arr1) //[2,3,4]