【JavaScript】力扣刷题用到的一些小细节

代码细节

数组

1、遇到数组有关的题目,需要判断其边界条件

数组排序

//数组正向排序
    nums.sort(function(a,b){
        return a - b
    })

生成26个数值为0的数组

const characters = Array(26).fill(0)

数组转换成字符串

const key = arr.join()
const str = arr.toString()

数组中插入某个元素

splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum', 'guitar');

// 运算后的 myFish: ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// 被删除的元素: [], 没有元素被删除

声明一个二位数组

	const memo = []
    for (let i = 0;i <n;i++){
        memo.push([])
    }
  //或者 生成一个mxn的数组
  const dp = Array(m).fill().map(item => Array(n).fill(0))

利用扩展运算符将数组转为用逗号分隔的参数序列

console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

利用reduce函数求数组的和

let arr = [1,2,3]
let n = 6
console.log(arr.reduce((sum, item) =>  sum + item , 0) === n); //true

获取数组的中间元素

let mid = nums.length >> 1

字符串

获取字符的Unicode编码

  • 获取编码数:charCodeAt(index)

遍历字符串

// 定义两个指针
    let left = 0
    let right = s.length - 1
    //遍历字符串
    while(left < right){
        if(s[left] !== s[right]){
            return false
        }
        left++
        right--
    }

number类型转换成字符串数组

let array = number.toString()

利用正则表达式去掉字符串中非字母

\W查找非单词字符

s = s.toLowerCase().replace(/[\W_]/g,"")

利用扩展字符串拆分字符:

let s = "anagra"
console.log([...s]);

输出为:['a', 'n', 'a', 'g', 'r', 'a']
然后可以进行字符的排序:

[...s].sort()

输出:['a', 'a', 'a', 'g', 'n', 'r']
通过[...s].sort().join('')形成字符串

获取子字符串

str.substr(start,len) // 开始截取字符的索引 len 截取的子字符串的长度
str.slice(start,finish) //参数为截取字符串的开始索引和结束索引 
alert( str.slice(0, 5) ); // 'strin',从 0 到 5 的子字符串(不包括 5)
//与 slice 几乎相同,但它允许 start 大于 end。
str.substring(start [, end])
let str = "stringify";

// 这些对于 substring 是相同的
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"

// ……但对 slice 是不同的:
alert( str.slice(2, 6) ); // "ring"(一样)
alert( str.slice(6, 2) ); // ""(空字符串)

变量匹配正则

  • 需要设置g,全局匹配,不然只匹配一个
replaceHtml = '<b style="font-weight: bold; background-color: yellow;">' + old + '</b>'
newreg = new RegExp(replaceHtml, "g")
newText = text.innerHTML.replace(newreg, old)
  • str.match方法判断是否匹配上某个字符串

对象

  • JavaScript 的对象有一个需要注意的特性:能够被访问任何属性,即使属性不存在也不会报错!读取不存在的属性只会得到 undefined

遍历字符串并统计相应字符个数

need = {}
 for (let a of t) {
    // 统计需要的字符
    need[a] = (need[a] || 0) + 1;
  }

对象中的某个属性是否存在

 c in need  // true or false
need.att === undefined  //true  意思不存在att这个属性

获取对象的长度

need = {}
console.log(Object.keys(need).length);

方法

得两数之间随机数(包含两数)

function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值 
}

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random

通过Number.toString([radix])将数字转换成某进制显示

num = 35
let Num2Str = num.toString(2) //100011 字符串形式的二进制表达
let Num2Str = num.toString(8) // 43 八进制

通过parseInt将某进制字符串转换成十进制数

function base10(str) {
    //parseInt(string, radix)   解析一个字符串并返回指定基数的十进制整数,
    //radix 是2-36之间的整数,表示被解析字符串的基数。
    return parseInt(str,2)
    //将str看做二进制数,返回十进制数
}
console.log(base10('11000000')); //192

交换数据

[list[i], list[i + 1]] = [next, current];

获取进位数 余数

let num = 16
console.log(Math.floor(num / 10)); //1
console.log(num % 10); //6
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值