小技巧
2024年10月8日...大约 2 分钟
提示
在JavaScript世界中,有些操作会让你无法理解,但是却无比优雅!
获取数组中的最后的元素
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array.slice(-1)); // 结果: [9]
console.log(array.slice(-2)); // 结果: [8, 9]
console.log(array.slice(-3)); // 结果: [7, 8, 9]
数字取整
let floatNum = 10.5;
let intNum = ~~floatNum;
console.log(intNum); // 结果: 10
提示
仅适用于小于2147483647的数字
字符串转数字
let str = "123";
let num = +str;
console.log(num); // 结果: 123
交换对象键值
let obj = {
key1: "value1",
key2: "value2",
};
let newObj = {};
Object.entries(obj).forEach(([key, value]) => (newObj[value] = key));
数组去重
let arrayNum = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, 0
];
let arrayStr = [
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
];
let arrayMixed = [
1, 2, "1", "2", true, false, "true", "false",
1, 2, "1", "2", true, false, "true", "false"
];
let uniqueNum = Array.from(new Set(arrayNum));
let uniqueStr = [...new Set(arrayStr)];
let uniqueMixed = [...new Set(arrayMixed)];
console.log(uniqueNum); // 结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
console.log(uniqueStr); // 结果: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
console.log(uniqueMixed); // 结果: [1, 2, '1', '2', true, false, 'true', 'false']
数组转对象
const arr = [1, 2, 3];
const obj = { ...arr };
console.log(obj); // 结果: {0: 1, 1: 2, 2: 3}
合并对象
const obj1 = { a: 1, b: 2 };
const obj2 = { c: 3, d: 4 };
const obj = { ...obj1, ...obj2 };
console.log(obj); // 结果: {a: 1, b: 2, c: 3, d: 4}
获取数组最后一项
let arr = [0, 1, 2, 3, 4, 5];
const last = arr.slice(-1)[0];
console.log(last); // 结果: 5
数组判断为空
// 普通写法
let arr = [];
console.log(arr.length == 0); // 结果: true
// 优雅写法
let arr = [];
console.log(arr == false); // 结果: true 不能用 === 强制等于判断
数值分割符
const largeNumber = 1_000_000;
console.log(largeNumber); // 结果: 1000000
深拷贝
let obj = { a: 1, b: 2, c: { d: 3, e: 4 } };
let newObj = JSON.parse(JSON.stringify(obj));
console.log(newObj); // 结果: {a: 1, b: 2, c: {d: 3, e: 4}}
提示
这种方法有局限性,不能拷贝函数、undefined、Symbol 等特殊类型。
获取文件名和后缀名称
使用 subtring() 截取字符串
提示
适用于文件名中出现多个点的情况
// 获取文件名
name.substring(0, name.lastIndexOf("."));
// 获取.后缀名
name.substring(name.lastIndexOf("."));
// 获取后缀名
name.substring(name.lastIndexOf(".") + 1);
使用正则
提示
适用于一个点的情况
let name = "file.txt";
let reg = /([^\\/]+)\.([^\\/]+)/i;
reg.test(name);
alert(RegExp.$1); // 文件名
alert(RegExp.$2); // 后缀名