frankFree / blog

blog地址
https://frankfree.github.io/blog
2 stars 0 forks source link

平时写代码中 js 常用小技巧,为代码瘦身,持续更新维护 #13

Open frankFree opened 5 years ago

frankFree commented 5 years ago
//  下面例子全部用arr作为示例
var arr = [1, 2, 3, 2, 3, 7, 8, 3, 4]

// 数组去重
var arr = [...new Set(arr)];

// 数组排序 排序可以使用sort 默认是字典序,并且可以根据需要定制,需要深入掌握
arr.sort((a, b) => a -b)

// 求最大值,使用扩展运算符...
max = Math.max.call(...arr)
max = Math.max.apply(null, arr)

// 复制数组
arr2 = [...arr]
arr2 = arr.concat()
arr2 = arr.slice()

// 迭代输出
arr.forEach((i) => console.log(i))

// 变量赋值 善用结构
const [a, b, c, d, e] = [2, 3,4, 5, 7]; // a=2, b=3, c=4, d=5, e=6

// 交换变量值
let a = 1, b = 2;
[a, b] = [b, a]
// 字符串中的字符是无法交换的
let str = 'ab';
[str[0], str[1]] = [str[1], str[0]]; // 无效,"ab"
// 不过可以将字符串拆成字符数组后就可以交换了
str = str.split(''); // ["a","b"]
[str[0], str[1]] = [str[1], str[0]]; // ["b","a"]

// 求数组的一半长度
halfLen = arr.length >> 1;

// 不过需要注意右移运算符>>优先级别加号+还低,例如
console.log(3 + (5 - 3 >> 1)); // 2
console.log(3 + ~~((5 - 3) / 2)); // 4

// ~~等价于Math.floor(),|0也等价于Math.floor()
halfLen = ~~(a.length / 2);
halfLen = a.length / 2 | 0;

// 判断奇偶
evenNum & 1 === 0; // 偶数
oddNum & 1 === 1; // 奇数

// 善用异或
5 ^ 5 === 0;
5 ^ 5 ^ 6 ^ 6 ^ 7 === 7;

// 判断数是否是2的幂次方
num & num - 1 === 0;