JS算法基础: 常用方法整理

这篇文章主要整理一些写算法题时常用的 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()

生成 01 之间的随机数,不包含 1

js 复制代码
Math.random();

生成 110 的随机整数:

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()

判断字符串中是否包含某个内容,返回 truefalse

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
相关推荐
z2005093013 小时前
今日算法(回溯算法)
数据结构·算法
毅炼14 小时前
今日LeetCode 摸鱼打卡
java·算法·leetcode
m0_6294947314 小时前
LeetCode 热题 100-----28. 两数相加
数据结构·算法·leetcode·链表
菜菜的顾清寒14 小时前
力扣HOT100(25)环形链表
算法·leetcode·链表
学不懂飞行器14 小时前
【2024电赛H题硬核解析】自动行驶小车满分对策:多路灰度循迹与陀螺仪“交替盲走”融合算法(附源码)
stm32·单片机·嵌入式硬件·算法·电赛
机器学习之心14 小时前
大跨度拱桥施工智能优化:基于改进RBF神经网络与多目标算法的工程实践
人工智能·神经网络·算法·大跨度拱桥施工智能优化
Deep-w14 小时前
【MATLAB】基于 MATLAB/Simulink 的无刷直流电机(BLDC)转速控制模糊 PID 算法
开发语言·算法·matlab
皮卡祺q14 小时前
【算法-0】背包问题(三维+二维)
java·javascript·算法
葫三生15 小时前
《论三生原理》对《周易》《道德经》的一次根本性重写?
人工智能·算法·计算机视觉·区块链·量子计算