JavaScript 刷题技巧

Python转JS,记录一些刷Leetcode题常用套路和两种语言的不同用法

1. array.push(val)

数组尾部增加元素,返回新数组长度

坑:
现有一个空数组res,一个长度时刻改变的数组temp。
需求:当temp的长度为3时,res.push(temp)

本以为每次push完,res里的元素会是每次长度为3时的temp(如[[1,2,3],[4,5,6],[7,8,9]]),
结果实际上每次res里的元素是temp里最后一次的值(如[[7,8,9],[7,8,9],[7,8,9]])

原因:
每次向res数组中Push的都是对temp数组的引用,所以temp[0]和temp[1]和temp[2]的引用都是同一个,值自然也一样了。

解决办法:
每次都深拷贝一次temp数组,令其为temp1,把引用不同但值相同的数组temp1加入res.

深拷贝方法:
temp1 = temp.slice(0)

这个方法有点蠢,如果大家有更好的办法欢迎与我讨论。

2. array.pop()

数组尾部删除元素,返回被删除元素

3.array.unshift(val)

数组头部增加元素,返回新数组长度

4.array.shift()

数组头部删除元素,返回被删除元素

5.Infinity

无穷大,用法:如 let nums = [Infinity] 用于比大小

6.array.indexOf(val)

找到返回下标,找不到返回-1

7.直接min(a,b)报错,要Math.min(a,b)

8.array.reverse()

反转数组

9.str.slice(a,b)

切片[a,b),不改变原数组

10.str.splice(a,b)

切片[a,b),改变原数组

str.splice(a,a+1,'n') 把索引为a的字符替换为n

11.array.join("-")

将字符串数组拼接为字符串,拼接符为 -

12.正则表达式str.split(/\s+/)

按字符串中所有长度的空格分割成字符数组

\s 表示空白符

+ 表示出现至少一次。

13.数组正序

nums.sort((a, b) => a - b);

P.S array.sort()有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。比如“10”会在“2”前面。

14.数组倒序

nums.sort((a, b) => b - a);

15.长度

arr.length

P.S python写惯了总会写成 len(arr),避坑

16.str.trim()

去除字符两端的空格

17.str.repeat(times)

把str重复times遍并拼接输出

18.Map对象(js中只有Map,没有HashMap)

添加元素:set()

判断是否存在:has()

获取value:get()

    var hashTable = new Map();
    for(let i =0 ;i<nums.length;i++){
        if(hashTable.has(nums[i])){
            return nums[i]
        }else{
            hashTable.set(nums[i], 1);
        }
    }

19.二分查找的几个模板

def shipWithinDays(self, weights: List[int], days: int) -> int:
        left = max(weights)-1
        right = sum(weights)+1

        while(left+1!=right):
            m = (left+right)//2
            res = 0
            total = 0
            for i in range(0,len(weights)):
                if(total+weights[i]<=m):
                    total += weights[i]
                else:
                    total = weights[i]
                    res+=1
            if(total<=m):
                res+=1
            
            if(res>days):
                left = m
            else:
                right = m
   
        return right
function BinarySearch(arr,item) {
        var left = 0,
            right = arr.length-1
        while(left<=right){
            var mid = Math.floor((left+right)/2)
            if(arr[mid] == item){
                return mid
            }
            else if(arr[mid]>item){
                right = mid-1
            }
            else{
                left = mid+1
            }
        }
        return false
    }

20. 判断元素是否为数组

Array.isArray() 用于确定传递的值是否是一个数组。如果是数组,则返回true,否则为false。

21.判断元素类型

alert(typeof a)

22. 展开语法(...)

展开语法(Spread syntax), 可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。(译者注: 字面量一般指 [1, 2, 3] 或者 {name: "mdn"} 这种简洁的构造方式)

function sum(x, y, z) {
    return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));

// expected output: 6

console.log(sum.apply(null, numbers));

// expected output: 6

23.创建数组

var arr = []; //创建一个空数组

var arr1 = new Array(); //创建空数组

24.求字符的ASCII码

str.charCodeAt(i)

# i为字符串str中某个字符的index。

# 小写字母:
password.charCodeAt(i)>96 && password.charCodeAt(i)<123

# 大写字母:
password.charCodeAt(i)>64 && password.charCodeAt(i)<91

# 数字:
password.charCodeAt(i)>47 && password.charCodeAt(i)<58

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值