前端算法题常用操作技巧中Java 与 Js 的使用区别

262 阅读2分钟

以前用的是 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]

每一行的对应项都会改变,这是因为这种方式声明得到的数组,的地址是一样的,所以修改一个其他的跟着改变 image.png

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