JavaScript 一些实用技巧
快速创建从0到n的数字
let arr1 = [...(new Array(n)).keys()];
let arr2 = Array.from({length:n},(v, k) => k);
Array.from 用法
Array.from({ length: 3 }, () => 'haha') // ["haha", "haha", "haha"]
随机返回几个 emoji
Array.from(
{length: 7},
(v, i) => String.fromCodePoint(
129300 + Math.floor(Math.random() * 20)
)
);
// ["🤜", "🤕", "🤡", "🤙", "🤧", "🤠", "🤥"]
数组的深拷贝
使用扩展运算符代替concat() 或者 slice()方法
let arr1 = [10, 20, 30];
// make a copy of arr1
let copy = [...arr1];
console.log(copy); // → [10, 20, 30]
let arr2 = [40, 50];
// merge arr2 with arr1
let merge = [...arr1, ...arr2];
console.log(merge); // → [10, 20, 30, 40, 50]
快速找出数组中的最大值、最小值
let arr = [10, 20, 30]
// 相当于 Math.max(10, 20, 30)
console.log(Math.max(...arr)); // → 30
console.log(Math.min(...arr)); // → 10
对象扩展
let obj1 = {
a: 10,
b: 20
};
let obj2 = {
...obj1,
c: 30
};
console.log(obj2); // → {a: 10, b: 20, c: 30}
注意,当obj2定义了与obj1中相同的属性时,会自动覆盖:
let obj1 = {
a: 10,
b: 20
};
let obj2 = {
...obj1,
a: 30
};
console.log(obj2); // → {a: 30, b: 20}
Object.assign() 应用
let obj1 = {a: 10};
let obj2 = {b: 20};
let obj3 = {c: 30};
// ES2018
console.log({...obj1, ...obj2, ...obj3}); // → {a: 10, b: 20, c: 30}
// ES2015
console.log(Object.assign({}, obj1, obj2, obj3)); // → {a: 10, b: 20, c: 30}
随机字符串
Math.random().toString(16).substring(2) // 13位
Math.random().toString(36).substring(2) // 11位
取整
var a = ~~10.23 // 10
var b = 10.23 | 0 // 10
var c = 10.23 >> 0 // 10
每三个数字加逗号
// 正则:
var num = '1234567890'
var format = num.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
console.log(format) // 1,234,567,890
//非正则:
function formatCash(str) {
return str.split('').reverse().reduce((prev, next, index) => {
return ((index % 3) ? next : (next + ',')) + prev
})
}
console.log(formatCash('1234567890')) // 1,234,567,890
数字字符串转换成数字(不用Number、parseInt和parseFloat)
var a ='666'
+a // 666
随机打乱一个数组
let arr = [1,2,3,4,5,6,7,7]
arr.slice().sort(() => Math.random() - 0.5)
随机颜色,随机十六进制代码
'#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
用最短的代码实现一个长度为m(6)且值都n(8)的数组
Array(6).fill(8)
判断奇偶数
const isEven = num => num % 2 === 0;
// isEven(3) -> false
斐波纳契数组
const fibonacci = n =>
Array(n).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
// fibonacci(5) -> [0,1,1,2,3]
大写每个单词的首字母
const capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase());
// capitalizeEveryWord('hello world!') -> 'Hello World!'
反转一个字符串
const reverseString = str => [...str].reverse().join('');
// reverseString('foobar') -> 'raboof'
取整
// 1. 丢弃小数,保留整数
parseInt(5/2);
// 2.向上取整
Math.ceil(5/2);
// 3,四舍五入.
Math.round(5/2);
// 4,向下取整
Math.floor(5/2);