Ydl's Blog

js常用API

2021-03-24

总结了一些比较常用的数据结构以及对应的API

常用数据结构

Array

js数组里面的元素类型可以都不一样

var a=new Array()
var a=[1,2,3]
a.length //Number
Array.isArray(a) //true
a.toString() //返回数组的字符串形式"1,2,3"
a.push(value,vlaue....) //在数组的末端添加一个或多个元素,并返回添加后的数组长度。
pop() //用于删除数组的最后一个元素,并返回该元素
shift() //用于删除数组的第一个元素,并返回该元素
unshift(value) //用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。
join() //以参数作为分隔符,将所有数组成员组成一个字符串返回。如果不提供参数,默认用逗号分隔。
concat() //将参数数组的成员,添加到原数组的尾部,然后返回一个新数组,原数组不变。
reverse() //用于颠倒数组中元素的顺序,改变了原数组
slice(start_index, upto_index); //用于提取原数组的一部分,返回一个新数组,原数组不变。第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)。如果省略第二个参数,则一直返回到原数组的最后一个成员。负数表示倒数第几个。
splice(index, count_to_remove, addElement1, addElement2, ...); //用于删除原数组的一部分成员,并可以在被删除的位置添加入新的数组成员,返回值是被删除的元素。第一个参数是删除的起始位置,第二个参数是被删除的元素个数。如果后面还有更多的参数,则表示这些就是要被插入数组的新元素。
sort() //对原数组成员进行排序,默认是按照字典顺序排序。如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数,表示按照自定义方法进行排序。该函数本身又接受两个参数,表示进行比较的两个元素。如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。
map() //对数组的所有成员依次调用一个函数,根据函数结果返回一个新数组。
forEach() //遍历数组的所有成员,执行某种操作,参数是一个函数。它接受三个参数,分别是当前位置的值、当前位置的编号和整个数组。
filter() //参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
some() //用来判断数组成员是否符合某种条件。接受一个函数作为参数,所有数组成员依次执行该函数,返回一个布尔值。该函数接受三个参数,依次是当前位置的成员、当前位置的序号和整个数组。只要有一个数组成员的返回值是true,则整个some方法的返回值就是true,否则false。
every() //用来判断数组成员是否符合某种条件。接受一个函数作为参数,所有数组成员依次执行该函数,返回一个布尔值。该函数接受三个参数,依次是当前位置的成员、当前位置的序号和整个数组。所有数组成员的返回值都是true,才返回true,否则false。
reduce() //依次处理数组的每个成员,最终累计为一个值。从左到右处理(从第一个成员到最后一个成员)
reduceRight() //依次处理数组的每个成员,最终累计为一个值。从右到左(从最后一个成员到第一个成员)
indexOf(s) //返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。可以接受第二个参数,表示搜索的开始位置
lastIndexOf(s) //返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

map

//传入函数的形式不同

a.map((x)=>{
return -x;
}) //把a数组里的所有元素取反,返回新数组

a.map(function(x){
return Math.abs(x)
}) //取绝对值

forEach

a.forEach((x,y,z)=>{
console.log(x,y,z)
})
// forEach中不能使用break或return来跳出循环
// 可以使用some和every方法来实现可跳出的循环,前者return true时跳出,后者return false跳出

filter

arr.filter(x=>{
if(x==='2'){
return true
}
else{
return false
}
}) //把符合条件的元素返回组成一个新数组

some/every

arr.some(x=>{
if(x==='2'){
return true
}
else{
return false
}
}) //arr[1,2,'1','2'] true

arr.every(x=>{
if(x==='2'){
return true
}
else{
return false
}
}) //false

reduce

//z是索引,w是原数组
t.reduce((x,y,z,w)=>{
console.log(z) // 1 2
return x*y;
}) //arr[1,2,3] 6

t.reduce((x,y,z,w)=>{
console.log(z) // 0 1 2
return x*y;
},0) 0

String

var s=new String()
var s="12345"
var str=String.fromCharCode(97); //str='a'
s.length
s.chatAt(index) //返回指定位置的字符
s.concat(s2) //返回新的连接后的字符串
s.slice(start,end) //用于从原字符串取出子字符串并返回新字符串,不改变原字符串。第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。
s.substring(start,end) //用于从原字符串取出子字符串并返回,不改变原字符串.第一个参数表示子字符串的开始位置,第二个位置表示结束位置。
s.substr(start,length) //用于从原字符串取出子字符串并返回,不改变原字符串。第一个参数是子字符串的开始位置,第二个参数是子字符串的长度。如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串。
s.indexOf(s) //返回给定元素在字符串中第一次出现的位置,如果没有出现则返回-1。可以接受第二个参数,表示搜索的开始位置
s.lastIndexOf() //返回给定元素在字符串中最后一次出现的位置,如果没有出现则返回-1。
s.trim() //用于去除字符串两端的空格,返回一个新字符串
s.toLowerCase() //用于将一个字符串全部转为小写,返回一个新字符串,不改变原字符串。
s.toUpperCase() //全部转为大写
s.localeCompare(s2) //用于比较两个字符串。它返回一个整数,如果小于0,表示第一个字符串小于第二个字符串;如果等于0,表示两者相等;如果大于0,表示第一个字符串大于第二个字符串。
s.match(regexp) //用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串。如果没有找到匹配,则返回null。
s.search() //返回值为匹配的第一个位置。如果没有找到匹配,则返回-1。
s.replace(oldValue,newValue) //用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g修饰符的正则表达式)。
s.split() //按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。还可传入第二个参数,决定了返回数组的成员数。

Map

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
//遍历map
for([key,value] of map){
console.log(key,value)
}

Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3, 3]); // {1, 2, 3}
s.add(4);
s; // Set {1, 2, 3, 4}
s.delete(3);
s; // Set {1, 2, 4}
s.size; // 3
s.has(2); // true

常用方法

进制转换

var value = parseInt(12).toString(2); 
//parsetInt里面是要转换的数字,toString里面是要转换的进制,
如果要转换为其他进制,替换掉就好了

判断变量类型

判断变量类型一般用typeof就可以了

声明相同元素数组

new Array(100).fill(1)数组长度为100,每个元素都是1

声明固定长宽的二维数组

/**
* 10列10行
**/
let arr = new Array(10);
for(let i = 0;i < arr.length; i++){
arr[i] = new Array(10).fill(0);
}

遍历ArrayMapSet

Array可以使用下标,MapSet不能使用下标,ES6引入了iterable类型,Array,Map,Set都属于iterable类型,它们可以使用for…of循环来遍历

let a = ['A', 'B', 'C'];
let s = new Set(['A', 'B', 'C']);
let m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (let x of a) {
log(x);
}
for (let x of s) {
log(x);
}
for (let x of m) {
log(x[0] + '=' + x[1]); // 分别是key和value
}

字符与ASCII码互转

将字符转为ascii码

let char='a';
let num=str.charCodeAt(); // 97

将ascii码转为对应字符

let num=97;
let char=String.fromCharCode(num);

小数取整

向上取整
Math.ceil(3/2) //2

向下取整
Math.floor(3/2) //1

四舍五入取整
Math.round(3/2) //2

数组索引处添加/删除

都是对原数组进行操作
删除arr.splice(index, 1)
添加arr.splice(index, 0, content)

Tags: API