这篇文章主要整理一些写算法题时常用的 JavaScript 方法,内容尽量简单清楚,方便后面复习和查找。 内容不是很全面,后续会持续更新补充。
1. 类型转换方法集:parseInt() 和 parseFloat()
parseInt() 和 parseFloat() 都是 JavaScript 的全局方法,可以直接使用。
它们常用来把字符串转换成数字。
parseInt()
parseInt() 用来把字符串转换成整数。
js
parseInt("123"); // 123
parseInt("3.14"); // 3
如果字符串前面是数字,后面有其他内容,也会尽量转换:
js
parseInt("100px"); // 100
如果开头不是数字,结果是 NaN:
js
parseInt("abc123"); // NaN
parseFloat()
parseFloat() 用来把字符串转换成小数。
js
parseFloat("3.14"); // 3.14
parseFloat("10.5px"); // 10.5
如果字符串符合科学计数法,也会进行转换:
js
parseFloat("314e-2"); // 3.14
parseFloat("0.0314E+2"); // 3.14
2. 数组 Array 方法集
数组方法主要用来处理一组数据,算法题中非常常见。
sort()
sort() 用来对数组排序。
从小到大排序:
js
let arr = [3, 1, 5, 2, 4];
arr.sort((a, b) => a - b);
console.log(arr); // [1, 2, 3, 4, 5]
a - b 表示从小到大排序。
从大到小排序:
js
let arr = [3, 1, 5, 2, 4];
arr.sort((a, b) => b - a);
console.log(arr); // [5, 4, 3, 2, 1]
b - a 表示从大到小排序。
注意:数字排序时不要直接写 arr.sort()。
因为默认会按照字符串排序,可能出现这种情况:
js
let arr = [10, 2, 1];
arr.sort();
console.log(arr); // [1, 10, 2]
push()
在数组末尾添加元素:
js
let arr = [1, 2];
arr.push(3);
console.log(arr); // [1, 2, 3]
pop()
删除数组最后一个元素,并返回被删除的元素:
js
let arr = [1, 2, 3];
let num = arr.pop();
console.log(num); // 3
console.log(arr); // [1, 2]
unshift()
在数组开头添加元素:
js
let arr = [2, 3];
arr.unshift(1);
console.log(arr); // [1, 2, 3]
shift()
删除数组第一个元素,并返回被删除的元素:
js
let arr = [1, 2, 3];
let num = arr.shift();
console.log(num); // 1
console.log(arr); // [2, 3]
includes()
判断数组中是否包含某个元素:
js
let arr = [1, 2, 3];
arr.includes(2); // true
arr.includes(5); // false
indexOf()
查找元素第一次出现的位置:
js
let arr = [1, 2, 3, 2];
arr.indexOf(2); // 1
arr.indexOf(5); // -1
找不到时返回 -1。
slice()
截取数组,不会改变原数组:
js
let arr = [1, 2, 3, 4];
arr.slice(1, 3); // [2, 3]
表示从下标 1 开始,截取到下标 3 之前。
splice()
删除或替换数组中的元素,会改变原数组。
删除元素:
js
let arr = [1, 2, 3, 4];
arr.splice(1, 2);
console.log(arr); // [1, 4]
表示从下标 1 开始,删除 2 个元素。
join()
把数组转成字符串:
js
let arr = ["a", "b", "c"];
arr.join("-"); // "a-b-c"
算法题中常和 split() 搭配使用:
js
let str = "hello";
let res = str.split("").reverse().join("");
console.log(res); // olleh
reverse()
反转数组,会改变原数组:
js
let arr = [1, 2, 3];
arr.reverse();
console.log(arr); // [3, 2, 1]
forEach()
遍历数组:
js
let arr = [1, 2, 3];
arr.forEach((item) => {
console.log(item);
});
map()
遍历数组,并返回一个新数组:
js
let arr = [1, 2, 3];
let newArr = arr.map((item) => item * 2);
console.log(newArr); // [2, 4, 6]
filter()
筛选符合条件的元素,返回一个新数组:
js
let arr = [1, 2, 3, 4];
let newArr = arr.filter((item) => item > 2);
console.log(newArr); // [3, 4]
reduce()
常用来求和:
js
let arr = [1, 2, 3, 4];
let sum = arr.reduce((total, item) => total + item, 0);
console.log(sum); // 10
3. Math 方法集
Math 用来处理数学计算,在算法题中很常见。
Math.max()
取最大值:
js
Math.max(1, 3, 5); // 5
数组中取最大值:
js
let arr = [1, 3, 5];
Math.max(...arr); // 5
Math.min()
取最小值:
js
Math.min(1, 3, 5); // 1
数组中取最小值:
js
let arr = [1, 3, 5];
Math.min(...arr); // 1
Math.floor()
向下取整:
js
Math.floor(3.9); // 3
算法题中经常用来取中间下标:
js
let mid = Math.floor((left + right) / 2);
Math.ceil()
向上取整:
js
Math.ceil(3.1); // 4
Math.round()
四舍五入:
js
Math.round(3.4); // 3
Math.round(3.5); // 4
Math.abs()
取绝对值:
js
Math.abs(-5); // 5
Math.pow()
计算次方:
js
Math.pow(2, 3); // 8
也可以写成:
js
2 ** 3; // 8
Math.sqrt()
开平方:
js
Math.sqrt(9); // 3
Math.random()
生成 0 到 1 之间的随机数,不包含 1:
js
Math.random();
生成 1 到 10 的随机整数:
js
let num = Math.floor(Math.random() * 10) + 1;
4. 字符串 String 方法集
字符串方法主要用来处理文本,在算法题中也经常用到。
length
获取字符串长度:
js
let str = "hello";
str.length; // 5
通过下标取字符
js
let str = "hello";
str[0]; // h
str[1]; // e
charAt()
获取指定位置的字符:
js
let str = "hello";
str.charAt(1); // e
算法题中一般更常用 str[i]。
indexOf()
查找某个字符或字符串第一次出现的位置。
js
let str = "hello world";
str.indexOf("o"); // 4
str.indexOf("world"); // 6
如果找不到,返回 -1:
js
let str = "hello";
str.indexOf("a"); // -1
常用来判断字符串中是否包含某个内容:
js
let str = "hello world";
if (str.indexOf("world") !== -1) {
console.log("包含 world");
}
includes()
判断字符串中是否包含某个内容,返回 true 或 false。
js
let str = "hello world";
str.includes("world"); // true
str.includes("abc"); // false
如果只是判断是否存在,includes() 比 indexOf() 更直观。
slice()
截取字符串。
js
let str = "hello world";
str.slice(0, 5); // hello
表示从下标 0 开始,截取到下标 5 之前,不包含 5。
也可以从某个位置截取到最后:
js
str.slice(6); // world
substring()
也可以截取字符串:
js
let str = "hello world";
str.substring(0, 5); // hello
常用时和 slice() 类似。
split()
把字符串分割成数组。
js
let str = "a,b,c";
str.split(","); // ["a", "b", "c"]
算法题中常用来把字符串拆成单个字符:
js
let str = "hello";
str.split(""); // ["h", "e", "l", "l", "o"]
replace()
替换字符串中的内容。
js
let str = "hello world";
str.replace("world", "JavaScript");
// hello JavaScript
普通 replace() 默认只替换第一个匹配项:
js
let str = "aaa";
str.replace("a", "b"); // baa
trim()
去掉字符串两边的空格。
js
let str = " hello ";
str.trim(); // hello
toUpperCase()
转成大写:
js
let str = "hello";
str.toUpperCase(); // HELLO
toLowerCase()
转成小写:
js
let str = "HELLO";
str.toLowerCase(); // hello