Skip to content
On this page

常用的 js 代码片段

1. 不使用临时变量交换两个变量

js
let a = 1;
let b = 2;
[a, b] = [b, a];

2. 浅克隆对象

js
const obj = {
  a: 1,
  b: 2
};
const clone = {
  ...obj
};

3. 合并对象

js
const obj1 = {
  name: '张三'
};
const obj2 = {
  age: 22
};

const mergedObj = {
  ...obj1,
  ...obj2
};

3. 过滤数组中的假值

js
const arr = [0, 1, 2, 3, false, '', null, undefined, NaN];
const filtered = arr.filter(Boolean);

5. NodeList 转换为数组

js
const nodeList = document.querySelectorAll('div');
const divList = Array.from(nodeList);
// or
const divList = [...nodeList];

6. 数组去重

js
const arr = [1, 2, 3, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];

7. 两数组的交集

js
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];
const intersection = arr1.filter(item => arr2.includes(item));

8. 两数组的差集

js
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];
const difference = arr1.concat(arr2).filter(v => !arr1.includes(v) || !arr2.includes(v));

9. 两数组的并集

js
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];
const union = [...new Set([...arr1, ...arr2])];

10. 数组求和

js
const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((acc, cur) => acc + cur, 0);

11. 对象数组指定属性求和

js
const arr = [{
    name: '张三',
    age: 22
  },
  {
    name: '李四',
    age: 23
  },
  {
    name: '王五',
    age: 24
  }
];

function sumBy(arr, key) {
  return arr.reduce((acc, cur) => acc + cur[key], 0);
}

12. 对象的计算属性

js
const key = 'name';
const obj = {
  [key]: '张三'
};

函数调用可作为计算属性吗?

13. 检查联网状态

js
const isOnline = window.navigator.onLine;

14. URL 的查询参数转对象

js
const search = '?name=张三&age=22'; // window.location.search 或者 new URL(url).search
const params = Object.fromEntries(new URLSearchParams(search));

15. 将秒数转换为时间格式的字符串

js
const seconds = 3661; // 一小时是 3600 秒,多出 61 秒

const toTimeString = seconds => new Date(seconds * 1000).toISOString().substr(11, 8);

toTimeString(seconds); // '01:01:01'

将秒数转换为 HH: MM: SS 格式的字符串。它通过给定的秒数加上时间戳起始点来创建一个新的 Date 对象,然后将其转换为 ISO 字符串,并提取时间部分得到结果。

16. 求某对象所有属性值的最大值

js
// 数学、语文、英语成绩
const scores = {
  math: 95,
  chinese: 99,
  english: 88
};

const maxObjectValue = obj => Math.max(...Object.values(obj));

// 最高分
maxObjectValue(scores); // 99

17. 判断对象的值中是否包含有某个值

js
const obj = {
  name: '张三',
  age: 22
};
const hasValue = (obj, value) => Object.values(obj).includes(value);

18. 判断对象的值中是否包含有某个键

js
const obj = {
  name: '张三',
  age: 22
};
const hasValue = (obj, key) => Object.keys(obj).includes(key);

19. 判断一个对象是否为空

js
function isEmpty(obj) {
  return Object.getOwnPropertyNames(obj).length === 0 && Object.getOwnPropertySymbols(obj).length === 0;
}

20. 获取文件扩展名

js
const fileName = 'useful-js-snippet.md';
const parseFileExtension = fileName => fileName.slice(((fileName.lastIndexOf('.') - 1) >>> 0) + 2);

位运算符 (>>>) 确保了即使未找到点号 (.) ,操作也是安全的,因为在这种情况下仍然会返回一个空字符串。

21. 切换 CSS 类

js
const element = document.querySelector('.my-element');

const toggleClass = (el, className) => el.classList.toggle(className);

toggleClass(element, 'active');

classList.toggle() 方法从一个元素的 class 列表中添加或移除某个 class。存在则删除,不存在则添加。

Released under the MIT License.