工作记录:8个有用的JS技巧
这里给大家分享我最近学习到的8个有用的js小技巧,废话不多说,我们上代码
1. 确保数组值
使用 grid ,需要重新创建原始数据,并且每行的列长度可能不匹配, 为了确保不匹配行之间的长度相等,可以使用Array.fill方法
1 2 | let array = Array(5).fill( '' ); console.log(array); // outputs (5) ["", "", "", "", ""] |
2. 获取数组唯一值
ES6 提供了从数组中提取惟一值的两种非常简洁的方法。不幸的是,它们不能很好地处理非基本类型的数组。在本文中,主要关注基本数据类型。
1 2 3 4 5 6 7 8 9 10 11 12 | const cars = [ 'Mazda' , 'Ford' , 'Renault' , 'Opel' , 'Mazda' ] const uniqueWithArrayFrom = Array. from ( new Set(cars)); console.log(uniqueWithArrayFrom); // outputs ["Mazda", "Ford", "Renault", "Opel"] const uniqueWithSpreadOperator = [... new Set(cars)]; console.log(uniqueWithSpreadOperator); // outputs ["Mazda", "Ford", "Renault", "Opel"] |
3.使用展开运算符合并对象和对象数组
对象合并是很常见的事情,我们可以使用新的ES6特性来更好,更简洁的处理合并的过程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // merging objects const product = { name: 'Milk' , packaging: 'Plastic' , price: '5$' } const manufacturer = { name: 'Company Name' , address: 'The Company Address' } const productManufacturer = { ...product, ...manufacturer }; console.log(productManufacturer); // outputs { name: "Company Name", packaging: "Plastic", price: "5$", address: "The Company Address" } // merging an array of objects into one const cities = [ { name: 'Paris' , visited: 'no' }, { name: 'Lyon' , visited: 'no' }, { name: 'Marseille' , visited: 'yes' }, { name: 'Rome' , visited: 'yes' }, { name: 'Milan' , visited: 'no' }, { name: 'Palermo' , visited: 'yes' }, { name: 'Genoa' , visited: 'yes' }, { name: 'Berlin' , visited: 'no' }, { name: 'Hamburg' , visited: 'yes' }, { name: 'New York' , visited: 'yes' } ]; const result = cities.reduce((accumulator, item) => { return { ...accumulator, [item.name]: item.visited } }, {}); console.log(result); /* outputs Berlin: "no" Genoa: "yes" Hamburg: "yes" Lyon: "no" Marseille: "yes" Milan: "no" New York: "yes" Palermo: "yes" Paris: "no" Rome: "yes" */ |
4. 数组 map 的方法 (不使用Array.Map)
另一种数组 map 的实现的方式,不用 Array.map。
Array.from 还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | const cities = [ { name: 'Paris' , visited: 'no' }, { name: 'Lyon' , visited: 'no' }, { name: 'Marseille' , visited: 'yes' }, { name: 'Rome' , visited: 'yes' }, { name: 'Milan' , visited: 'no' }, { name: 'Palermo' , visited: 'yes' }, { name: 'Genoa' , visited: 'yes' }, { name: 'Berlin' , visited: 'no' }, { name: 'Hamburg' , visited: 'yes' }, { name: 'New York' , visited: 'yes' } ]; const cityNames = Array. from (cities, ({ name}) => name); console.log(cityNames); // outputs ["Paris", "Lyon", "Marseille", "Rome", "Milan", "Palermo", "Genoa", "Berlin", "Hamburg", "New York"] |
5. 有条件的对象属性
不再需要根据一个条件创建两个不同的对象,可以使用展开运算符号来处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 | nst getUser = (emailIncluded) => { return { name: 'John' , surname: 'Doe' , ...emailIncluded && { email : 'john@doe.com' } } } const user = getUser( true ); console.log(user); // outputs { name: "John", surname: "Doe", email: "john@doe.com" } const userWithoutEmail = getUser( false ); console.log(userWithoutEmail); // outputs { name: "John", surname: "Doe" } |
6. 解构原始数据
有时候一个对象包含很多属性,而我们只需要其中的几个,这里可以使用解构方式来提取我们需要的属性。如一个用户对象内容如下:
1 2 3 4 5 6 7 8 9 10 | const rawUser = { name: 'John' , surname: 'Doe' , email: 'john@doe.com' , displayName: 'SuperCoolJohn' , joined: '2016-05-05' , image: 'path-to-the-image' , followers: 45 ... } |
我们需要提取出两个部分,分别是用户及用户信息,这时可以这样做:
1 2 3 4 5 | let user = {}, userDetails = {}; ({ name: user.name, surname: user.surname, ...userDetails } = rawUser); console.log(user); // outputs { name: "John", surname: "Doe" } console.log(userDetails); // outputs { email: "john@doe.com", displayName: "SuperCoolJohn", joined: "2016-05-05", image: "path-to-the-image", followers: 45 } |
7. 动态属性名
早期,如果属性名需要是动态的,我们首先必须声明一个对象,然后分配一个属性。这些日子已经过去了,有了ES6特性,我们可以做到这一点。
1 2 3 4 5 6 | const dynamic = 'email' ; let user = { name: 'John' , [dynamic]: 'john@doe.com' } console.log(user); // outputs { name: "John", email: "john@doe.com" } |
8.字符串插值
在用例中,如果正在构建一个基于模板的helper组件,那么这一点就会非常突出,它使动态模板连接容易得多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | const user = { name: 'John' , surname: 'Doe' , details: { email: 'john@doe.com' , displayName: 'SuperCoolJohn' , joined: '2016-05-05' , image: 'path-to-the-image' , followers: 45 } } const printUserInfo = (user) => { const text = The user is ${user.name} ${user.surname}. Email: ${user.details.email}. Display Name: ${user.details.displayName}. ${user.name} has ${user.details.followers} followers. console.log(text); } printUserInfo(user); // outputs 'The user is John Doe. Email: john@doe.com. Display Name: SuperCoolJohn. John has 45 followers.' |
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体