前端各种小技巧(可选链操作符等)

6797次阅读 126人点赞 作者: WuBin 发布时间: 2025-05-27 09:18:33
扫码到手机查看

前端小技巧

Array.includes()快速判断数组是否包含元素

这个方法是ES7的特性,也是当下前端数据处理中高频使用的技巧。

// 定义一个水果数组
const fruits = ['apple', 'banana', 'cherry', 'orange'];
// 使用includes()方法判断数组中是否包含'banana'
const hasBanana = fruits.includes('banana');
console.log(hasBanana); // true
// 判断数组中是否包含'grape'
const hasGrape = fruits.includes('grape');
console.log(hasGrape); // false

Vue的列表数据筛选场景中,Array.includes()能让你的代码瞬间清爽,性能也大幅提升!

Object.fromEntries()轻松将键值对数组转为对象

当从后端接口拿到的数据是[['key1', 'value1'], ['key2', 'value2']]这种键值对数组格式时,想把它转为对象方便使用,传统方法可能需要写一堆循环代码。Object.fromEntries()方法完美解决这个痛点,它是ES10的新特性。

// 假设后端返回的用户信息是键值对数组
const userArray = [
    ['name', 'Tom'],
    ['age', 28],
    ['email', 'tom@example.com']
];
// 使用Object.fromEntries()将键值对数组转为对象
const userObject = Object.fromEntries(userArray);
console.log(userObject); 
// {name: 'Tom', age: 28, email: 'tom@example.com'}

在处理登录接口返回数据表单提交数据解析等场景时,这个方法能让你少写几十行代码,开发效率直接起飞!

Optional Chaining(可选链操作符) 

多层对象取值不再怕null报错!在处理多层嵌套的对象时,最怕遇到某个中间属性为nullundefined,导致直接取值时报错。比如user.address.city,如果useruser.addressnull,代码就会直接崩掉。Optional Chaining操作符?.就是为解决这个问题而生,是ES2020的热门特性,也是前端稳定性的重要保障。

// 假设从API获取的用户数据可能存在null情况
const user = null;
// 传统写法,需要层层判断
// if (user && user.address && user.address.city) {
//     console.log(user.address.city);
// }
// 使用Optional Chaining,直接链式调用,遇到null自动返回undefined
const city = user?.address?.city;
console.log(city); // 输出undefined,不会报错

Vuecomputed属性计算中,这个操作符能让你的代码更健壮,再也不用担心null引发的“惨案”!

Array.flatMap()映射+拍平一步到位

有时候我们需要对数组进行映射操作后再拍平,比如对数组中的每个子数组进行处理并合并成一个新数组。传统方法需要先使用map再用flat,而Array.flatMap()能将这两个步骤合二为一,是数据清洗预处理的“神器”。

// 定义一个包含子数组的数组
const nestedArray = [[1, 2], [3, 4], [5, 6]];
// 使用flatMap()方法,将每个子数组中的元素乘以2并拍平
const newArray = nestedArray.flatMap((subArray) => subArray.map((num) => num * 2));
console.log(newArray); // [2, 4, 6, 8, 10, 12]

在处理表格数据转换树形结构扁平化等复杂数据处理场景时,flatMap()能让你的代码量减少一半,效率却提升数倍!

Object.keys()Object.values()Object.entries()快速获取对象的键、值、键值对

在操作对象时,经常需要获取对象的所有键、值或者键值对。以前可能需要通过for...in循环来实现,现在有了Object.keys()Object.values()Object.entries()这三个方法,一切都变得简单直接,是对象遍历数据提取的必备技巧。

// 定义一个用户对象
const user = {
    name: 'Alice',
    age: 30,
    city: 'London'
};
// 使用Object.keys()获取对象的所有键
const keys = Object.keys(user);
console.log(keys); // ['name', 'age', 'city']
// 使用Object.values()获取对象的所有值
const values = Object.values(user);
console.log(values); // ['Alice', 30, 'London']
// 使用Object.entries()获取对象的所有键值对
const entries = Object.entries(user);
console.log(entries); 
// [['name', 'Alice'], ['age', 30], ['city', 'London']]

Array.sort()自定义排序规则

默认的Array.sort()方法在处理数字数组时可能会出现不符合预期的结果,因为它会先将元素转为字符串再比较。通过自定义排序函数,我们可以实现各种复杂的排序需求,在数据展示列表排序中非常实用。

// 定义一个数字数组
const numbers = [5, 2, 8, 1, 9];
// 使用默认的sort()方法,结果可能不符合预期
const defaultSort = numbers.sort();
console.log(defaultSort); // [1, 2, 5, 8, 9] 看似正常,但如果是两位数以上会有问题
// 使用自定义排序函数,实现升序排序
const ascendingSort = numbers.sort((a, b) => a - b);
console.log(ascendingSort); // [1, 2, 5, 8, 9]
// 使用自定义排序函数,实现降序排序
const descendingSort = numbers.sort((a, b) => b - a);
console.log(descendingSort); // [9, 8, 5, 2, 1]

console高级用法

// 格式化输出对象,比普通log更清晰
const complexObject = {
    name: '复杂对象',
    data: [
        { id: 1, value: '数据1' },
        { id: 2, value: '数据2' }
    ]
};
console.table(complexObject);
// 计时功能,统计代码执行时间
console.time('代码执行时间');
for (let i = 0; i < 1000000; i++) {}
console.timeEnd('代码执行时间');
// 分组输出日志,方便整理调试信息
console.group('重要逻辑');
console.log('步骤1');
console.log('步骤2');
console.groupEnd();

相关资料

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:Array.includes,?.,Array.flatMap,可选链操作符
推荐阅读
  • python基础-操作列表和迭代器

    python基础笔记-操作列表和迭代器的相关方法

    6364次阅读 141人点赞 发布时间: 2024-06-13 13:26:27 立即查看
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    10894次阅读 730人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    14845次阅读 597人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    13806次阅读 1109人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    17880次阅读 1433人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    16103次阅读 1300人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    31566次阅读 2485人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    27649次阅读 2137人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录