数组和字符串方法

在JS中内置了很多的方法,不同的对象有不同的方法(方法其实就是对象中的函数)

let obj = {
  方法名: function () {}
}

obj.方法名()

数组方法

数组方法是属于数组中的一些函数,可以对数组进行操作。使用的方式是:数组.方法名(参数)

数组方法只能被数组调用

push

向数据的末尾插入新的值

let arr = []
arr.push(值) 
// 数组就会变成 [值]

// 也可以同时插入多个值
arr.push(值1, 值2, 值3, 值n)

以后记住,VSCode提示这种写法,表示可以写很多个参数。

push方法有返回值,一般不用,返回值是插入新元素之后的长度。

let arr = [8, 9, 7]
let length = arr.push(5) // 一般不会没事获取到它的返回值
console.log(length) // 4 

pop

删除数组的末尾最后一个值

let arr = [1, 2, 3]
arr.pop()
console.log(arr) // [1, 2]

pop有返回值,是被删除的那个值

let arr = [1, 2, 3]
let item = arr.pop() // 3

unshift

在数组的首位添加一个值

let arr = []
arr.unshift(值)
arr.unshift(值1, 值2, 值3, 值n)

他的返回值和push一致,是插入后的数组长度

shift

删除数组首位的值

let arr = [1, 2, 3]
arr.shift() // 1
console.log(arr) // [2, 3]

他的返回值是被删除的值。

indexOf

根据目标值查找数组中对应的值的下标。如果有返回下标,如果没有返回-1

fromIndex ?: number 表示第二个参数是数字,?表示可选(可写可不写)

let arr = [1, 2, 3, 4, 5, 3, 3]

console.log(arr.indexOf(3)) // 2 找到第一个出现的3 就结束
console.log(arr.indexOf(3, 4) // 5 跳1 2 3 4 的遍历直接从下标为4的元素开始

lastIndexOf

和indexOf功能相同,找到最后一个出现的目标值的下标

let arr = [1, 2, 3, 4, 5, 6, 5]
console.log(arr.lastIndexOf(5)) // 6
console.log(arr.lastIndexOf(5, 5) // 4

和indexOf的方向刚好相反,所以第二个参数写好之后,表示向前查找。

includes

ES6中新增的方法,兼容性差,IE浏览器不支持,用来判断数组中是否存在某个值,返回结果为布尔值

let arr = [1,2,3,4,5]

console.log(arr.includes(3)) // true
console.log(arr.includes(6)) // false

该属性也支持第二个参数,和indexOf的第二个参数一样

let arr = [1,2,3,4,5]
console.log(arr.includs(2, 3)) // false 从下标为3的元素开始往后找。没有2,所以为false

concat

想要把两个数组拼接成一个数组时,可以使用concat。concat的返回值是拼接后的数组,原数组不变。

let arr = [1,2,3]
arr.concat([4,5,6]) // 这个操作的返回值就是拼接后的数组 [1,2,3,4,5,6]
console.log(arr) // [1,2,3] 不变

arr.concat([4,5,6], [7, 8, 9], 10) // 这个操作的返回值就是拼接后的数组 [1,2,3,4,5,6,7,8,9,10] 里边的值可以直接是数字

forEach

forEach可以替代for循环进行数组的遍历。个人建议使用forEach替代for循环进行正序的数组遍历

let arr = [1,2,3,4,5]
for (let i = 0; i < arr.length; i++) {
  // arr[i] 是数组中的每一个值 i是下标
}

arr.forEach(function (item, index, arr) {
  // 这里的item index arr三个参数的名字可以随便改
  // item表示对应的值 index表示下标 arr表示遍历的数组本身
  // 一般这里的参数只需要写 item 最多再写index arr基本不用
})

疑问?为什么我们声明的函数function (item, index, arr) {}我们没有调用也执行了?

因为js的内部帮我们进行了调用了。不需要我们自己调用。

下面是forEach的原理,因为涉及到了一些高级的用法,所以看看就行。

function forEach(arr, callbackfn) {
  for (let i = 0; i < arr.length; i++) {
    callbackfn(arr[i], i, arr)
  }
}

forEach([1,2,3,4,5], function (item, index, arr) {
  
})

map

他和forEach类似,也会产生一个遍历,但是,他有自己固定的功能,在我们想要从一个数组中遍历出某些数据时使用

let arr = [
  {name: "张三", age: 18},
  {name: "李四", age: 20}
]

// 获取到对应的一个新的数组 ["张三", "李四"]
let names = arr.map(function (item) {
  return item.name
})

console.log(names) // ['张三', '李四']

map的语法和forEach一致。不一样的在于return,map在对应的函数中return会作为新数组中的值。

map的返回值是一个和原数组长度一致的数组,通过改变map内部的函数的返回值,可以得到不同的数组。

应用场景:在一个数组中,获取到我们想要的数据信息。

const potatoes = [{weight: 400}, {weight: 300}, {weight: 599}]

// [400, 300, 599]
let weights = potatoes.map(function (potato) {
  return potato.weight
})


let arr = [{a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}]

// 只要数组中的a和c属性 [{a: 1, c: 3}, {a: 1, c: 3}, {a: 1, c: 3}, {a: 1, c: 3}]
arr.map(function (item) {
  return {a: item.a, c: item.c}
})

join

把数组按照规则转换为字符串,不会改变原数组,返回值是一个字符串

let arr = [1,2,3,4,5,6]
arr.join("字符串") // 1字符串2字符串3字符串4字符串5字符串6

arr.join("")表示直接讲数组中的值连接在一起变成字符串

arr.join()表示用,连接,和toString效果一致。

reverse

反向,将数组直接变成一个倒序排列的数组

let arr = [1,2,3]

arr.reverse() // 返回值为倒序的数组 

console.log(arr) // 原数组也会变成倒序的数组

sort

用于数组中的值的排序,升序或者降序。返回值是排序后的数组,原数组也会改变。

默认的排序规则按照对应的查词典的方式,首位先比较大小(按ASCII码进行比较)小的在前,大的在后,相同则比较下一位。依次类推。

// 对数字进行排序
let arr = [24235,5,264,3,532,56,4367,34,65324]

arr.sort(function (a, b) {
  return a - b // 升序排列
})

arr.sort(function (a, b) {
  return b - a // 降序排列
})

函数中,我们的核心代码,就是在判断a和b中的值谁大谁小的问题。

我们要判断谁大的问题

arr.sort(function (a, b) {
  if (a > b) {
    return 负数 // 如果是负数 b放前面 a放后面  如果是正数相反
  }

  if (a < b) {
    return 正数 // b放在前面 a在后面
  }
  
  if (a === b) {
    return 0 // 位置不动
  }
})
let stus = [
  {
    name: "张三",
    age: 18,
    sex: "男"
  }, {
    name: "李四",
    age: 20,
    sex: "男"
  }, {
    name: "王五",
    age: 18,
    sex: "女"
  }, {
    name: "小花",
    age: 19,
    sex: "女"
  }
]

// 请对学生进行排序,按照年龄从小到大进行排列
stus.sort(function (a, b) {
  return a.age - b.age
})

冒泡排序

// 编写方法,实现冒泡
var arr = [29,45,51,68,72,97];
//外层循环,控制趟数,每一次找到一个最大值
for (var i = 0; i < arr.length - 1; i++) {
  // 内层循环,控制比较的次数,并且判断两个数的大小
  for (var j = 0; j < arr.length - 1 - i; j++) {
    // 白话解释:如果前面的数大,放到后面(当然是从小到大的冒泡排序)
    if (arr[j] > arr[j + 1]) {
      var temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}
console.log(arr);//[2, 4, 5, 12, 31, 32, 45, 52, 78, 89]

slice

用来裁切数组,我们如果想要获取到数组中某一部分的数组片段,可以使用slice方法

[1,2,3,4,5,6,7,8]想要得到[4,5,6]

slice不会改变原数组,slice返回值为裁切下来的数组片段

let arr = [1,2,3,4,5,6,7]
arr.slice(2, 3) // [3]
arr.slice(2) // [3, 4, 5, 6, 7]
arr.slice(-3) // -1指最后一位,-3指倒数第三位 [5, 6, 7]

splice

会改变原数组,将原数组中的值进行修改,有三个功能:插入,删除,修改

删除

使用两个参数即可,得到的返回值,是删除的值组成的数组。

let arr = [1,2,3,4]
arr.splice(下标, 数量) 

插入

需要使用三个参数,第一个参数为下标,表示插入到这个下标的前面,第二个参数为固定的0,后面的参数为要插入的值。

let arr = [1,2,3,4]

arr.splice(下标, 0, 插入的值1, 插入的值2, 插入的值n) // [] 返回值为空,因为没有删除
console.log(arr) // arr改变了

修改

所谓修改就是删除原本的值,然后再添加的新的值

let arr = [1,2,3,4]
// arr.splice(1, 1, 5)
arr.splice(1, 2, 5)

字符串方法

可以通过打印new String()查看所有的字符串方法

split *

把字符串按照规则转成数组。和数组方法join刚好相反

let str = "字符串"
str.split("") // ["字", "符", "串"]

let str = "1&2&3"
str.split("&") // [1, 2, 3]

slice substr substring *

裁切字符串

let str = "字符串"
str.slice(0, 2) // 字符
str.slice(-2) // 符串
str.substr(1, 2) // 符串
str.substring(0, 2) // 字符

slice 既支持正数,右支持负数下标

substring 正数和slice效果相同,负数不支持

substr 第一个参数开始裁切的下标 第二个参数表示要裁切的长度

replace *

将一个字符串中指定的字符进行替换,替换成新的字符。没有正则表达式支持的情况下,只能替换第一个。

let str = "123"
str.replace('1', '2') // 223
str.replace(/值/g, "替换后的值")

let str = "aaaaab"
str.replace('a', 'b') // baaaab
str.replace(/a/g, 'b') // bbbbbb

search

用于查询某个字符串对应的下标,没有则返回-1。支持正则表达式

let str = "123456"
console.log(str.search('3')) // 2

indexOf lastIndexOf

可以获取到对应的值在字符串中的下标,不支持正则表达式,和数组类似

前者正序查找,后者倒序查找。只会找到第一个

toLowerCase toUpperCase

把英文变成纯小写或者纯大写

let str = "AaBb"
str.toLowerCase() // aabb
str.toUpperCase() // AABB

trim

去除字符串左右两侧的空格

let str = "   jfdis  fdkasgjd   "
str.trim() // "jfdis  fdkasgjd"

我们也可以单独清楚前和后的空格,可以利用下面的方法。兼容性很差

  • trimStart trimLeft 清除左侧(前面)的空格
  • trimEnd trimRight 清除右侧(后面)的空格

之前我们如果想清除空格,可以使用这样一个操作,前期了解即可

function trim (str) {
  return str.replace(/^\s*|\s*$/g, '')
}

includes

和数组的includes方法类似,用来判断字符串中是否有指定的字符串,有则返回true,无返回false

let str = "123456"

console.log(str.includes('2')) // true

charCodeAt()

没有参数str.charCodeAt()会得到对应的字符的ASCII码,如果有多个值,则得到字符串中第一个值的ascii码

String.fromCharCode(65) // A
for (let i = 65; i <= 91; i++) {
  console.log(String.fromCharCode(i))
}

String.fromCharCode(ASCII码)

我们填入对应的ascii,就会得到对应的字符

 
String.fromCharCode(65) // A
for (let i = 65; i <= 91; i++) {
  console.log(String.fromCharCode(i))
}
 

数值方法

toFixed

保留小数位,四舍五入,返回的字符串,精确数字不要用

let num = 1.2345
console.log(num.toFixed(2)) // 1.23
console.log(num.toFixed(3)) // 1.235

toPrecision

返回科学计数法的字符串,参数为科学计数法前面的总位数。

let num = "123432654251"
num.toPrecision(3) // 1.23e+11

toExponential

同上,参数指的是小数位

在Number中提供了很多的常量

Number.xxx
Number.EPSILON
Number.MAX_SAFE_INTEGER
Number.MAX_VALUE
Number.MIN_SAFE_INTEGER
Number.MIN_VALUE
Number.Number.NEGATIVE_INFINITY
Number.NaN
Number.POSITIVE_INFINITY
  1. EPSILON: 2.220446049250313e-16
  2. MAX_SAFE_INTEGER: 9007199254740991
  3. MAX_VALUE: 1.7976931348623157e+308
  4. MIN_SAFE_INTEGER: -9007199254740991
  5. MIN_VALUE: 5e-324
  6. NEGATIVE_INFINITY: -Infinity
  7. NaN: NaN
  8. POSITIVE_INFINITY: Infinity

一些全局方法

isNaN(值)

判断对应的值是否是NaN

Array.isArray(值)

用来判断某个值是否是数组

Array.isArray([]) // true
Array.isArray({}) // false

获取到精确的数据类型

Object.prototype.toString.call(值) // [object 值类型]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值