以前用的是 java 刷算法题,换 js 之后很多常用代码习惯不太一样,记录一下
声明数组
声明长度为 5 的数组
let dp= new Array(5);
声明 并 初始化数组,全部初始化为 false
let dp = new Array(target+1).fill(false); //[ false, false, false, false, false ]
声明二维数组
let dp= new Array(2).fill().map(v => new Array(3).fill(false));
// [ [ false, false, false ], [ false, false, false ] ]
.fill() 是必须的,如果没有在一位数里声明占位就会得到空元素;
let dp= new Array(2).map(v => new Array(3).fill(false));
// [ <2 empty items> ]
踩坑:如果不使用.map声明二维数组,var vis = new Array(4).fill(new Array(3).fill(false))
js数组追加元素
var vis = new Array(4).fill(new Array(3).fill(false))
//(4) [Array(3), Array(3), Array(3), Array(3)]
//0: (3) [false, false, false]
//1: (3) [false, false, false]
//2: (3) [false, false, false]
//3: (3) [false, false, false]
那么当修改二维数组的某一项时:
vis[0][0]=true
//1. (4) [Array(3), Array(3), Array(3), Array(3)]
//0: (3) [true, false, false]
//1: (3) [true, false, false]
//2: (3) [true, false, false]
//3 (3) [true, false, false]
每一行的对应项都会改变,这是因为这种方式声明得到的数组,的地址是一样的,所以修改一个其他的跟着改变
Java 使用队列方便添加、删除数据,Js 可以直接对数组进行上述操作。
在队尾(数组尾部)添加数据:
let arr = [1,2,3];
arr.push(4);
console.log(arr) //[ 1, 2, 3, 4 ]
在队首(数组头部)添加数据:
let arr = [1,2,3];
arr.unshift(4);
console.log(arr) //[ 4, 1, 2, 3]
读取并删除队列头部元素:
let arr = [1,2,3,4];
const head=arr.shift();
console.log(arr); //[ 2, 3, 4 ]
console.log(head); //1
字符串与数组的转化
Java 字符串转数组 需要 split() 方法,Js 字符串转数组 可以直接使用扩展运算符:
const a = "andcis";
const b = [...a];
console.log(b); //[ 'a', 'n', 'd', 'c', 'i', 's' ]
数组转字符串,元素之间的连接符可选
const arr = [1,2,3,4];
const str=arr.join('');
console.log(str); // 1234
const arrs = [1,2,3,4];
const str_2=arrs.join('*');
console.log(str_2); // 1*2*3*4
遍历字符串
Java 里面要用 for 循环,加 charAt,但是 Js 不用 charAt 这么麻烦
var a="dscajdns";
for(var i=0;i<a.length;i++){
console.log(a[i]);
}
// d
// s
// c
// a
// j
// d
// n
// s
拷贝数组
不影响原来的数组拷贝:深拷贝!!!
var bb = [9,8,7,6];
var nj = bb.slice(0);
console.log(nj); //[ 9, 8, 7, 6 ]
nj.splice(0,1);
console.log(nj); //[ 8, 7, 6 ]
console.log(bb); //[ 9, 8, 7, 6 ] 可以看到修改拷贝后的数组也不及影响原来的数组
数组排序
Java 可以直接使用sort() 方法对数组进行排序,但是 Js 直接使用 sort() 方法会出现如下现象。
let arr=[7,8,9,1,2,3,10,11,12];
arr.sort();
console.log(arr); //[ 1, 10, 11, 12, 2, 3, 7, 8, 9]
所以在 Js 里对数组进行排序必须写清楚排序规则
let arr=[7,8,9,1,2,3,10,11,12];
arr.sort((a,b) => a-b); // 升序
console.log(arr); // [ 1, 2, 3, 7, 8, 9, 10, 11, 12]
取最大最小值
> let a = Number.MAX_VALUE; //最大值
let b = -Number.MAX_VALUE; //最小值
字符串转数组
如果没记错的话,Java 将字符串转数组是将字符串➕’0‘,Js中➕’0‘操作是无效的,而是需要 -’0‘;
let tmp ="123"-'0';
console.log(tmp); // 123
let tmp ="123"-'0'-1;
console.log(tmp); // 122