好用方法
数组
数组转置
ts
let s:string[]=['1','2','3']
let j:number=s.length
for(let i=0;i<Math.floor(j/2);i++){
[s[i],s[j-i-1]]=[s[j-i-1],s[i]]
}
console.log(s)//['3','2','1']
防止原数组被修改
使用数组的拷贝来防止原始数组被修改:
js
const nums=[1,2,3]
const tempNums1=nums
const tempNums2=nums.slice()
// 随机改变数组顺序
function shuffle(arr) {
arr.sort(() => Math.random() - 0.5);
}
shuffle(nums)
console.log(nums,tempNums1,tempNums2)
字符串
截取字符串中的数字
leetcode第八题
ts
function myAtoi(s: string): number {
if(s.length===0){
return 0
}
let i:number=0
let isCpt:number=1
while(i<s.length&&s[i]===' '){
i++
}
if(s[i]==='+'){
i++
}
else if(s[i]==='-'){
isCpt=-1
i++
}
// 截取到数字字符串,可以使用s.substring(i).match(/^\d+/)截取到数字字符串
// 是因为通过match(/^\d+/)获取到字符串中的数字部分,再使用substring(i)将其截取出来
// 如果直接substring(0),有可能将负号也会进行截取,导致返回为null
let matcher:RegExpMatchArray=s.substring(i).match(/^\d+/)
if(!matcher)return 0
let result:number=Number(matcher[0])*isCpt
if(result<-2147483648)return -2147483648
if(result>2147483647)return 2147483647
return result
};
去除前后空白以及空格字符
使用正则表达式\s+
匹配一个或多个连续的空格字符:
ts
let s=' hello world '
let ss=s.trim().split(/\s+/).reverse().join(' ')
console.log(ss)//hello world
去除数组中的空元素
ts
let newArr=arr.filter(Boolean)
位运算
汉明距离是x和y转换为二进制后,上下对比,不同的话,汉明距离+1;异或性质:x^x=0,x^0=x。
js
var hammingDistance = function(x, y) {
// 对x和y进行异或,相同为0,不同为1
let s=x^y,res=0
// 计算1有多少个
while(s!=0){
// s&1代表与1匹配则为1,否则为0,相当于迭代s
res+=s&1
// 使用<<为有符号右移(<<<为无符号),每循环一次就丢掉最低位,其余右移
// 左移可以用s<<=1或者s*=2
s>>=1
}
return res
};
颠倒二进制位:
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
js
var reverseBits = function(n) {
let res=0
let count=32
while(count--){
res<<=1//左移一位,以保证空出位置存放下一位
res+=n&1
n>>=1//右移一位,保证下一位是n的最低位
}
return res >>> 0//保证为无符号整数
};
排序
当使用js的排序方法sort()
对数字进行排序时,由于是按照字符串对比的方式,所以会产生错误的结果,例如:
js
let arr=[1,20,50,100]
arr.sort()
console.log(arr)// [1, 100, 20, 50]
// 解决方法:
// 按升序
arr.sort(function(a,b){return a-b})// [1, 20, 50, 100]
// 按降序
arr.sort(function(a,b){return b-a})// [100, 50, 20, 1]
简化代码
- 利用
||
或&&
运算符;来简化代码:
js
let val;
if (a) {
val = a;
} else if (b) {
val = b;
} else {
val = c;
}
// 可简化成
const val = a || b || c;
js
if (a && b) {
func();
}
// 可简化成
a && b && func();
OR 运算符 ||
如果第一个值是真值(在不计算第二个值的情况下),它将返回第一个值。否则,它将返回第二个值。
AND 运算符 &&
如果第一个值是假值(在不计算第二个值的情况下),它将返回第一个值。否则,它将返回第二个值。
Nullish 合并 运算符 ??
与 ||
相同,只是它只将 null
和 undefined
视为假值。