返回

20 个 JavaScript 代码片段, 提升你的前端开发技能!

前端

JavaScript 中的实用代码片段,提升开发效率

1. 字符串反转

反转字符串是常见的编程任务。在 JavaScript 中,您可以使用 split(), reverse()join() 方法轻松地做到这一点。

const reversedString = str.split('').reverse().join('');

2. 数组最大值/最小值

获取数组中的最大值或最小值对某些应用程序很有用。使用 Math.max()Math.min() 函数,您可以轻松实现:

const maxValue = Math.max(...array);
const minValue = Math.min(...array);

3. 数组去重

如果您需要删除数组中重复的元素,可以使用 Set()Set() 是一种数据结构,不会保存重复的值:

const uniqueArray = [...new Set(array)];

4. 对象键值对交换

有时候,您可能需要交换对象中键和值的位置。使用 Object.entries()Object.fromEntries(),您可以轻松实现:

const swappedObject = Object.fromEntries(Object.entries(object).map(([key, value]) => [value, key]));

5. 深拷贝对象

简单地将一个对象分配给另一个对象不会创建它的副本。相反,它会创建对原始对象的引用。要创建深拷贝,可以使用 JSON.stringify()JSON.parse()

const deepCopy = JSON.parse(JSON.stringify(object));

6. 函数柯里化

柯里化是一种将一个函数转换为另一个函数的技术,该函数接收更少的参数。这在部分应用和创建更通用的函数时很有用:

const curriedFunction = (a) => (b) => a + b;

7. 函数防抖

防抖可用于防止函数在短时间内被重复调用。它在处理快速输入(例如键入或滚动)时很有用:

const debouncedFunction = _.debounce(function, delay);

8. 函数节流

节流可用于限制函数在给定时间间隔内调用的次数。它在处理频繁发生的事件(例如调整窗口大小)时很有用:

const throttledFunction = _.throttle(function, delay);

9. 异步任务并行执行

当您有多个异步任务需要同时执行时,可以使用 Promise.all()。它将等待所有承诺解决,然后返回一个包含所有结果的数组:

Promise.all([promise1, promise2, promise3]).then((values) => {
  // Handle the results of all promises
});

10. 异步任务串行执行

串行执行异步任务时,可以使用 then() 方法。它将创建一个 promise 链,依次执行每个任务:

promise1.then((result) => {
  return promise2(result);
}).then((result) => {
  return promise3(result);
}).then((result) => {
  // Handle the final result
});

11. 数组分组

使用 groupBy() 方法,您可以将数组中的元素按属性分组。这在聚合数据或创建分组结构时很有用:

const groupedArray = _.groupBy(array, (item) => item.property);

12. 数组分页

chunk() 方法可用于将数组拆分为更小的块。这在显示分页数据或分块处理大数组时很有用:

const paginatedArray = _.chunk(array, pageSize);

13. 对象转换为 URL 查询字符串

要将对象转换为 URL 查询字符串,可以使用 URLSearchParams。它将创建编码的查询字符串,您可以将其附加到 URL 上:

const queryString = new URLSearchParams(object).toString();

14. URL 查询字符串转换为对象

要将 URL 查询字符串转换为对象,可以使用 URLSearchParams。它将解析查询字符串并返回一个包含所有键值对的对象:

const object = new URLSearchParams(queryString).entries();

15. 日期格式化

使用 moment.js 库,您可以轻松地格式化日期。它提供了一系列格式化选项,让您可以自定义日期的显示方式:

const formattedDate = moment(date).format('YYYY-MM-DD');

16. 正则表达式匹配

正则表达式可用于查找和验证字符串中的模式。使用 test() 方法,您可以检查字符串是否与给定的正则表达式匹配:

const isMatch = regex.test(string);

17. 正则表达式替换

要替换字符串中的模式,可以使用 replace() 方法。它将匹配的模式替换为给定的替换字符串:

const replacedString = string.replace(regex, replacement);

18. 元素滚动到顶部

要滚动元素到其容器的顶部,可以使用 scrollIntoView() 方法。它带有一个平滑的行为选项,可提供流畅的滚动体验:

element.scrollIntoView({ behavior: 'smooth', block: 'start' });

19. 元素滚动到底部

要滚动元素到其容器的底部,可以使用 scrollIntoView() 方法并指定 end 块:

element.scrollIntoView({ behavior: 'smooth', block: 'end' });

20. 获取元素相对于文档的偏移量

getBoundingClientRect() 方法返回元素相对于文档的边界框。这对于计算元素的位置和大小很有用:

const offset = element.getBoundingClientRect();

常见问题解答

1. 为什么使用 JSON.parse()JSON.stringify() 进行深拷贝?

JSON.parse()JSON.stringify() 是创建对象副本的可靠方法。它们将对象转换为 JSON 字符串,然后将其解析回一个新对象,从而断开对原始对象的引用。

2. 什么时候使用函数柯里化?

函数柯里化可用于创建更通用的函数,并允许部分应用。这在需要创建具有可变数量参数的函数时很有用。

3. 函数防抖和节流有什么区别?

函数防抖防止函数在短时间内被多次调用,而函数节流限制函数在给定时间间隔内调用的次数。防抖用于处理快速输入,而节流用于处理频繁发生的事件。

4. 使用 async/await 替代 Promise 链的优点是什么?

async/await 语法使异步代码的编写更加清晰和容易维护。它消除了嵌套承诺并允许您使用同步语法编写异步代码。

5. 正则表达式与字符串匹配方法有什么区别?

正则表达式是一种强大的工具,可以进行复杂的模式匹配。它们通常用于验证输入或查找特定字符串中的模式。字符串匹配方法(如 includes()startsWith()) 更简单,但功能更有限。