JS刷题遇到的语法相关的小问题记录【持续更新】

创建m*n的二维数组

let arr=Array(m).fill().map(item=>Array(n))

js创建二维数组,没有let arr=[ ][ ]这种字面量形式。

正确做法是:
先创建一个长度为m的一维数组,然后用fill()填充,fill()不带参数的情况下,填充的值是undefined。然后将这个一维数组中的每一个item,映射成为一个长度为n的数组,即可创建一个m*n的二维数组。

两个字符相减

let sub='b'.charCodeAt()-'a'.charCodeAt()      //=1

js中,两个字符相减时,不会自动转换成ASCII码,如果直接计算’b’-‘a’,则输出的结果时NaN。需要使用charCodeAt()方法将字符转换成对应的ASCII码值。

在一维数组中添加一维数组作为其item

例如:对于res=[ ],path=[1,2,3],想要将path添加入res,最终为:res=[[1,2,3]]
方法是:

res.push([...path])   //浅拷贝一份path存入res中

!!!不能直接res.push(path),这样是将path地址的引用存入到了res中,即res[0]和path指向同一地址空间,当path中的值发生变化时,res[0]也会跟着改变

获取一维数组中的最大值

获取一维数组nums中的最大值

let max_num=Math.max(...nums)

获取子数组

获取数组nums=[1,2,3,4,5]中的子数组[3,4]
通过slice方法,注意:slice的范围是左闭右开的

let res=nums.slice(2,4)      //res=[3,4]

将Map和Set转换成Array

方法一:Array.from

var set = new Set([1, 2, 3, 3, 4]);
Array.from(set)      //输出[1,2,3,4]
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);         //输出:[ [1, 2], [2, 4], [4, 8] ]

方法二:扩展运算符…

var set = new Set([1, 2, 3, 3, 4]);
[...set]                                          //输出[1,2,3,4]
var m = new Map([[1, 2], [2, 4], [4, 8]]);
[...m]                                          //输出:[ [1, 2], [2, 4], [4, 8] ]

定义长度为m的数组

let arr=Array(m).fill(0)

splice

用于删除数组中指定位置的元素,以及在数组中添加新元素
splice(操作的元素的下标,删除元素的个数,添加的新元素值)

//删除数组中指定位置的元素
arr=[10,11,12]
arr.splice(1,1)   //arr=[10,12]
//在数组中指定位置添加元素
arr=[10,11,12]
arr.splice(1,0,5)   //arr=[10,5,11,12]
//删除数组中的第一个元素,并在第一个元素的位置插入2,3
arr=[10,11,12]
arr.splice(1,1,2,3)     //arr=[10,2,3,12]

ACM模式刷题

主要在于记住以下几点:
单行输入:line=readline()
多行输入:while(line=readlines()){}
输入是以字符串的形式存储到line的,因此,要取出输入的数字:
1、分隔。需要通过lines=split(’ ')将多个数字分隔开,存储到一个数组中
2、转数字。数组line中目前存储的是字符串的形式,需要通过parseInt(lines[0])转换成数字

多行输入
1 5
10 20

while (line = readline()) {    //读取多行输入,每行输入保存到字符串line中
    var lines = line.split(' ');    //根据空格将字符串line分隔开,保存到数组lines中
    var a = parseInt(lines[0]);   //数组lines中的每一项保存的是字符串形式的,要将其转换成整数
    var b = parseInt(lines[1]);
    print(a + b);
}

多行输入
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
2
1 5
10 20

let line_num=readline()   //读取第一行(单行读取)
line_num=parseInt(line_num)    //转换成数字
for(let i=0;i<line_num;i++){
    line=readline()      //单行读取
    lines=line.split(' ')    //分隔
    a=parseInt(lines[0])   //转换成数字
    b=parseInt(lines[1])
    console.log(sum(a,b))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值