JS -- 常用Array和String原型上的方法

468 阅读7分钟

1.数组原型上的方法

  • push
    • 在数组末尾新增1个或多个数据
    • 返回新增后数组的长度
  • pop
    • 删除数组末尾的一项数据
    • 返回被删除的数据
  • unshift
    • 在数组头部新增1个或多个数据
    • 返回新增后数组的长度
  • shift
    • 删除数组头部的一项数据
    • 返回被删除的数据
  • reduce
    • 第一个参数是一个callback函数,该函数接收4个参数
      • 累计器
      • 当前值
      • 当前索引
      • 源数组
      • 返回值:分配给累计器
    • 第二个参数:作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错
  • reverse
    • 将数组中元素的位置颠倒
    • 返回改变后的数组(该方法会改变原数组)
    • 该方法会改变原数组
  • sort
    • 对数组的元素进行排序,默认会将元素转换为字符串
    • 返回排序后的数组(该方法会改变原数组)
  • splice
    • 删除或添加元素
    • 可接收多个参数
      • start:要删除元素的开始位置,可为负数
      • deleteCount: 可选,表示要删除元素的个数,如果 deleteCount 是 0 或者负数,则不删除元素
      • value1, value2,...: 要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。
    • 返回被删除的元素组成的一个数组
  • slice
    • 截取数组
    • 可接收两个参数
      • begin: 可选。截取起始处的索引,可为负数。若没有begin,则从0开始
      • end: 可选。截取结束的索引,但截取时不包括索引为end的位置。可为负数。若没有end,则代表截取到数组末尾。
    • 不会修改原数组
    • 返回被截取出来的新数组
    • Array.prototype.slice.call(arguments) 将类数组转为数组 ([].prototype.slice.call(arguments))
  • concat
    • 合并两个或多个数组
    • var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
    • value 可以是数组或值
    • 不会修改原数组
    • 返回合并后的新数组
  • copyWithin
    • 浅复制数组的一部分到同一数组中的另一个位置
    • arr.copyWithin(target[, start[, end]])
      • target:复制序列到该位置,可以为负数。若target大于数组长度,则不会复制,如果 target 在 start 之后,复制的序列将被修改以符合 arr.length

      • start: 复制元素的起始位置,可以为负数。若没有start,则从0开始复制。

      • end: 复制元素的结束位置,但不包括end这个位置,可以为负数。若没有end,则默认复制到数组的末尾。

    • 会改变原数组,但不会修改原数组的长度
    [1, 2, 3, 4, 5].copyWithin(-2)
    // [1, 2, 3, 1, 2]
    
    [1, 2, 3, 4, 5].copyWithin(0, 3)
    // [4, 5, 3, 4, 5]
    
    [1, 2, 3, 4, 5].copyWithin(0, 3, 4)
    // [4, 2, 3, 4, 5]
    
    [1, 2, 3, 4, 5].copyWithin(-2, -3, -1)
    // [1, 2, 3, 3, 4]
    
    • 返回浅复制后的数组
  • join
    • 将一个数组的所有元素连接成一个字符串并返回这个字符串
    • arr.join([separator]) separatormore为','
    • Array.prototype.join.call(arguments)
  • indexOf
    • 返回在数组中可以找到一个给定元素的第一个索引
    • 没有找到,返回-1
  • lastIndexOf
    • 返回在数组中可以找到一个给定元素的最后一个索引
    • 没有找到,返回-1
  • forEach
    • 对数组的每个元素执行一次给定的函数
    • arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
    • 除了抛出异常以外,没有办法中止或跳出 forEach() 循环
  • map
    • 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值
    • 不会改变原数组
  • filter
    • 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
    const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
    
    const result = words.filter(word => word.length > 6);
    
    console.log(result);
    // expected output: Array ["exuberant", "destruction", "present"]
    
  • every
    • 测试一个数组内的所有元素是否都能通过某个指定函数的测试
    • 每一次测试都为true, 返回true, 否则返回false
    • 如果用一个空数组进行测试,在任何情况下它返回的都是true
  • some
    • 测试数组中是不是至少有1个元素通过了被提供的函数测试
    • 至少一个元素通过回调函数的测试就会返回true;所有元素都没有通过回调函数的测试返回值才会为false
    • 如果用一个空数组进行测试,在任何情况下它返回的都是false
  • fill
    • 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
    • arr.fill(value[, start[, end]])
    • 返回填充后的数组
  • includes
    • 判断一个数组是否包含一个指定的值
    • 返回一个布尔值
  • find
    • 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined
  • findIndex
    • 返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。
  • flat
    • 数组扁平化
    • var newArray = arr.flat([depth])
      • depth表示扁平的深度,默认为1. depth为Infinity,可展开任意深度的嵌套数组
    • flat() 方法会移除数组中的空项
  • keys
    • 返回一个包含数组中每个索引键的Array Iterator对象
    • 返回一个新的Array迭代器对象
  • values
    • 返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值
  • entries
    • 返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对
  • Array.from, Array,isArray不是数组原型上的方法
  1. 字符串原型上的方法
  • charAt
    • 从字符串中获取指定索引的字符
    • str.charAt(index) index默认为0
    • 返回指定的字符,若index超出长度,则返回一个空字符串
  • charCodeAt
    • 指定 index 处字符的 UTF-16 代码单元值的一个数字(0 到 65535 之间的整数)
    • 如果 index 超出范围,charCodeAt() 返回 NaN
  • concat
    • 连接2个或多个字符串
    • 返回连接后的字符串
    • 建议用+, +=代替concat方法
  • includes
    • 判断一个字符串是否包含在另一个字符串中, 区分大小写
    • str.includes(searchString[, position])
  • indexOf
    • 返回str中第一次出现的指定值的索引,没有则返回-1
  • match
    • 返回一个字符串匹配正则表达式的结果
    • str.match(regexp)
    • 返回值
      • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组
        • 如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。
    • 附加属性
      • index: 匹配的结果的开始位置
      • input: 搜索的字符串
      • groups: 一个捕获组数组 或 undefined(如果没有定义命名捕获组)
    • 如果正则表达式不包含 标志,str.match() 将返回与 RegExp.exec() 相同的结果
    • 不传参,返回 [""]
  • matchAll
    • RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError
        const regexp = /t(e)(st(\d?))/g;
        const str = 'test1test2';
        const array = [...str.matchAll(regexp)];
        console.log(array[0]); // Array ["test1", "e", "st1", "1", ...]
        console.log(array[1]); //Array ["test2", "e", "st2", "2", ...]
    
    • 返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
  • repeat
    • 重复了多少遍原字符串
    • str.repeat(count)
    • 返回一个新的字符串
  • replace
    • str.replace(substr, newSubStr)
    • str.replace(regexp, function/newSubStr )
    • 不会修改原字符串
    • 返回一个新的替换后的字符串
  • replaceAll
    • 当使用一个 regex时,必须设置全局(“ g”)标志
  • search
    • 执行正则表达式和str之间的一个搜索匹配
    • 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1
  • slice
    • 截取字符串
    • str.slice(beginIndex[, endIndex]) 不包括endIndex。endIndex支持负数
    • 不会修改原字符串
    • 返回一个从原字符串中提取出来的新字符串
  • split
    • 将字符串转为数组
  • substr
    • str.substr(start[, length]) length 为 0 或负值,返回''
    • 返回一个字符串中从指定位置开始到指定字符数的字符
  • substring
    • 截取从 indexStart 到 indexEnd(不包括)之间的字符
    • indexEnd不支持负数
  • toLowerCase
    • 将字符串转为小写
    • 不改变原字符串
  • toUpperCase
    • 将字符串转为大写
    • 不改变原字符串
  • trim
    • 去除字符串两端的空白
    • 不改变原字符串