JS中字符串方法有哪些?

方法

描述

返回值

是否改变原始字符串

split

字符串按指定字符分割为字符串数组

Array

lastIndexOf

返回某个指定的字符串值最后出现的位置

Number

indexOf

返回某个指定的字符串值在字符串中首次出现的位置

Number

concat()

连接两个或多个字符串

String,返回新字符串

substring()

提取字符串中介于两个指定下标之间的字符,左闭右开[start,end)
start,end非负整数,负数转0

String

slice()

方法可提取字符串的某个部分,并以新的字符串返回被提取的部分,[start,end)
start负数,则从尾部开始截取 slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)

includes()

判断字符串是否包含指定的子字符串

replace()

replaceAll()

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
replaceAll该函数会替换所有匹配到的子字符串

trim()

用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等
不适用于 null, undefined, Number 类型

var str = "how are you";
var word = str.split(" "); // ["how","are","you"]

slice()和substring()区别

负数截取,slice支持负数截取,而substring不支持。

JS 数组方法

方法

描述

返回值

是否改变原数组

join()

用指定的分隔符将数组每一项拼接为字符串,默认逗号

String

push()

数组末尾添加1/n
向数组的末尾添加新元素,可以添加一个或多个元素

Number,返回数组新长度

改变数组长度

pop()

数组末尾删除1
删除数组最后一个元素

所有类型,返回在最后一个元素

改变数组长度

shift()

数组开头删除1
删除数组第一个元素

所有类型,返回第一个元素

改变数组长度

unshift()

向数组的开头添加一个或更多元素

Number,返回数组新长度

改变数组长度

sort()

数组元素排序,默认字母升序
数字排序,通过一个函数作为参数来调用
数字升序,Array.sort(
function(a,b){return b-a})

Array

改变原始数组

reverse()

颠倒数组中元素的顺序

Array

改变原始数组

concat()

连接两个或多个数组

Array,返回新数组

slice()

返回从原数组中指定开始下标到结束下标之间的项组成的新数组

两个参数,要返回项的起始和结束位置(新数组不包括结束位置的元素);一个参数默认结束位置为数组末尾
当出现负数时,将负数加上数组长度的值来替换该位置的数

Array,返回新数组

splice()

可实现删除、插入和替换
=> 删除元素 / 指定索引添加元素 / 替换指定索引位置元素
array.splice(index,howmany,item1,.....,itemX)

index - 必需,数组元素下标
howmany - 可选,数字,删除多少元素,未规定则删除从 index 开始到原数组结尾的所有元素
item1,......,itemX - 选,要添加到数组的新元素

Array,返回删除元素的数组

改变原始数组

indexOf()

从数组的开头(位置 0)开始向后查找
两个参数:要查找的项和(可选的)表示查找起点位置的索引

Number

lastIndexOf()

从数组的末尾开始向前查找
两个参数:要查找的项和(可选的)表示查找起点位置的索引

Number

fill()

es6新增(es6+) 使用特定值填充数组中的一个或多个元素。
当只是用一个参数时,该方法会用该参数的值填充整个数组
3 个参数: 填充数值,起始位置参数,结束位置参数(不包括结束位置的那个元素)

filter()

返回满足过滤条件组成的数组

Array

every()

判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回 true,参数Function

Boolean

some()

判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回 true,参数Function

Boolean

includes()

es7+ 判断一个数组是否包含一个指定的值
参数有两个,1(必填)需要查找的元素值,2(可选)开始查找元素的位置
使用===运算符来进行值比较

Boolean

sort()

forEach()

对数组进行遍历循环,对数组中的每一项运行给定函数
参数都是 function 类型,默认有传
参数:遍历的数组内容;对应的数组索引,数组本身

-

map()

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值

reduce()

、reduceRight()

迭代数组的所有项(即累加器),然后构建一个最终返回的值

reduce()方法从数组的第一项开始,逐个遍历到最后
reduceRight()则从数组的最后一项开始,向前遍历到第一项
4 个参数:前一个值、当前值、项的索引和数组对象

copyWithin()

es6+ 从数组的指定位置拷贝元素到数组的另一个指定位置中

改变原数组

find()

接受两个参数:一个回调函数,一个可选值用于指定回调函数内部的 this

该回调函数可接受三个参数:数组的某个元素value,该元素对应的索引位置index,以及该数组本身。
均会在回调函数第一次返回 true 时停止查找

返回匹配的值

findIndex()

同上

返回匹配值得索引

toLocaleString()

、toString()

将数组转换为字符串

flat()

、flatMap()

es6+ 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回

entries()

、keys()

、values()

es6+ 遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历
区别:keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历

JS实现数组去重

已知数组arr,对该数组进行去重,去重后的数组用uniqueArray代替。

1 利用ES6中的Set方法去重

let uniqueArray = Array.from(new Set(arr));
let uniqueArray = [...new Set(arr)];

2 some()方法去重

some()方法判断数组中是否存在满足条件的项,满足返回true。定义新数组承接未重复数据,遍历原始数组的时候,用新数组来判断数据是否已经出现过。

   function uniqueArr(arr) {
       // 新数组
       let result = [arr[0]];
       for(let i = 1; i < arr.length; i++) {
           // 判断结果数组中是否存在一样的值,若果没有的话则将数据存入结果数组中
           if(!result.some(val => {arr[i] === val})) {
               result.push(arr[i]);
           }
       }
       return result;
   }

3 双重for循环+splice去重

第一层循环确保数组中的每一项都能被比较,第二层循环确保被比较项后的每一项都能跟被比较项比较,重复则splice(index,1)删除重复元素。

4 filter()+indexOf()方法去重

数组的当前元素在原始数组中的第一个索引==当前索引值,则第一次出现,即唯一。

   function uniqueArr(arr) {
       return arr.filter((item, index, arr)=>{
           return arr.indexOf(item, 0) === index;
       })
   }

5 ES6中Map方法去重

通过创建一个空Map数据结构,然后遍历需要去重的数组,最后把数组的每一个元素作为key存到Map中,由于Map中不会出现相同的key,所以最后得到的结果就是数组去重后的所有元素。

   function uniqueArr(arr) {                
       let map = new Map();               
       let result = [];      
       for (let i = 0, i < arr.length; i++) {    
           if (map.has(arr[i])) {       
               // 判断是否存在key          
               map.set(array[i], true);     
           } else {       
               map.set(array[i], false); 
               result.push(array[i]);  
           }                   
       }                 
       return result;         
   }

reduce()实现数组求平均值

// arr为已知数组,要求数组每项元素为数字类型Number
arr.reduce((acc, current) => acc + current) / arr.length

二维数组定义:

var arr = new Array(10); //表格有10行
for(var i = 0;i < arr.length; i++){
 arr[i] = new Array(10).fill(0); //每行有10列
}

JS 进制转换

进制分:十进制、二进制、十六进制、八进制。

在JavaScript内部的默认情况下,二进制、十六进制、八进制字面量数值,都会自动转为十进制进行运算。

### 十进制转其他进制
toString()转换 => x.toString(n) - x十进制数字,n转换的进制(2,8,16,32)

### 其他进制转十进制
parseInt()转换 => parseInt(m,n) - m转换的数,n转换的数是多少进制的,如parseInt(x,2)代表将二进制数x转换为十进制

### 其他进制之间的转换 - 先转十进制,再转其他进制
// 表示将二进制的x转换为十六进制
parseInt(x,2).toString(16))
// 表示将十六进制的x转换为二进制
parseInt(x, 16).toString(2)

JS Map

Map 对象存有键值对,其中的键可以是任何数据类型。

Map 对象记得键的原始插入顺序。

Map 对象具有表示映射大小的属性。

注意:Map默认存储中,当存在key值相同时,后存储的key值对应的value会默认覆盖先前已有的value值。

方法

描述

new Map()

创建新的 Map 对象。

set()

为 Map 对象中的键设置值。

get()

获取 Map 对象中键的值。

entries()

返回 Map 对象中键/值对的数组。

keys()

返回 Map 对象中键的数组。

values()

返回 Map 对象中值的数组。

clear()

删除 Map 中的所有元素。

delete()

删除由键指定的元素。

has()

Map.has(key) 如果键存在,则返回 true。

forEach()

Map迭代 为每个键/值对调用回调。

JavaScript中按值对Map进行排序

  • 使用展开语法 (...) 获取 Map 条目的数组。

  • 在数组上调用 sort() 方法。

  • 将结果传递给 Map() 构造函数。

// 按值升序排序(从低到高)
const sortNumAsc = new Map([...map2].sort((a, b) => a[1] - b[1])); // 值为数字类型
const sortNumAsc = new Map([...map2].sort((a, b) => a[1] > b[1] ? 1 : -1)); // 值为字符类型
// 同理,按键升序排序(从低到高)
const sortKeyAsc = new Map([...map2].sort((a, b) => a[0] - b[0]));

JS Set

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

Set中的特殊值

Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:

  • +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;

  • undefined 与 undefined 是恒等的,所以不重复;

  • NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复

方法

描述

new Set()

创建新的 Set 对象。

add()

添加元素

delete()

删除元素

size

Set中元素个数

has()

判断 Set 中是否包含某个元素 如果存在,则返回 true。

clear()

清空Set实例

entries()

返回 Set对象中键/值对的数组。

keys()

返回 Set对象中键的数组。

values()

返回 Set对象中值的数组。

Array.from()

Set转换成数组 Array.from(set)

遍历:forEach、for of

JS正则表达式

未完待续……

JavaScript区分元素是字符还是数值类型的方法

  • isNaN:检查其参数是否是非数字值。

  • 如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。

  • typeof:使用 typeof 操作符来检测变量的数据类型。

  • string、number、boolean、object。

  • 在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。

JS 数学Math相关

Math.cbrt():求一个数的立方根。

Math.abs():求一个数的绝对值。

Math.pow(m,n):求m的n次方。