Skip to content

好用方法

数组

数组转置

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]

简化代码

  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 合并 运算符 ??|| 相同,只是它只将 nullundefined 视为假值。

Released under the MIT License.