8 个有用的JS技巧(推荐)


Posted in Javascript onJuly 03, 2019

为了保证的可读性,本文采用意译而非直译。

想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你!

这些技巧可能大家大部分都用过了,如果用过就当作加深点映像,如果没有遇到过,就当作学会了几个技巧。

1. 确保数组值

使用 grid ,需要重新创建原始数据,并且每行的列长度可能不匹配, 为了确保不匹配行之间的长度相等,可以使用Array.fill方法。

let array = Array(5).fill('');
console.log(array); // outputs (5) ["", "", "", "", ""]

2. 获取数组唯一值

ES6 提供了从数组中提取惟一值的两种非常简洁的方法。不幸的是,它们不能很好地处理非基本类型的数组。在本文中,主要关注基本数据类型。

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特性来更好,更简洁的处理合并的过程。

// 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方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:

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. 有条件的对象属性

不再需要根据一个条件创建两个不同的对象,可以使用展开运算符号来处理。

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. 解构原始数据

有时候一个对象包含很多属性,而我们只需要其中的几个,这里可以使用解构方式来提取我们需要的属性。如一个用户对象内容如下:

const rawUser = {
  name: 'John',
  surname: 'Doe',
  email: 'john@doe.com',
  displayName: 'SuperCoolJohn',
  joined: '2016-05-05',
  image: 'path-to-the-image',
  followers: 45
  ...
}

我们需要提取出两个部分,分别是用户及用户信息,这时可以这样做:

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特性,我们可以做到这一点。

const dynamic = 'email';
let user = {
  name: 'John',
  [dynamic]: 'john@doe.com'
}
console.log(user); // outputs { name: "John", email: "john@doe.com" }

8.字符串插值

在用例中,如果正在构建一个基于模板的helper组件,那么这一点就会非常突出,它使动态模板连接容易得多。

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.'

译者:前端小智

原文:https://devinduct.com/blogpost/26/8-useful-javascript-tricks

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
this[] 指的是什么内容 讨论
Mar 24 Javascript
js 判断一个元素是否在页面中存在
Dec 27 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
Aug 05 Javascript
JS对select控件option选项的增删改查示例代码
Oct 21 Javascript
window.open()实现post传递参数
Mar 12 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
Aug 28 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
vue swipe自定义组件实现轮播效果
Jul 03 #Javascript
20个必会的JavaScript面试题(小结)
Jul 02 #Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 #Javascript
Angular.JS读取数据库数据调用完整实例
Jul 02 #Javascript
js实现for循环跳过undefined值示例
Jul 02 #Javascript
Vue的路由及路由钩子函数的实现
Jul 02 #Javascript
Node.js 实现远程桌面监控的方法步骤
Jul 02 #Javascript
You might like
PHP 图片水印类代码
2012/08/27 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
p5.js临摹旋转爱心
2019/10/23 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
基于python绘制科赫雪花
2018/06/22 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
学习Django知识点分享
2019/09/11 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python3爬虫中异步协程的用法
2020/07/10 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
党员教师一句话承诺
2014/05/30 职场文书
关于诚信的活动方案
2014/08/18 职场文书
重温入党誓词主持词
2015/06/29 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python