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 相关文章推荐
jQuery 遍历json数组的实现代码
Sep 22 Javascript
学习JavaScript设计模式之享元模式
Jan 18 Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 Javascript
详解JavaScript设计模式开发中的桥接模式使用
May 18 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
用js实现before和after伪类的样式修改的示例代码
Sep 07 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
在antd Form表单中select设置初始值操作
Nov 02 Javascript
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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
详解django中Template语言
2020/02/22 Python
美国网上花店:JustFlowers
2017/02/12 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
毕业生动漫设计求职信
2013/10/11 职场文书
税务专业毕业生自荐信
2013/11/10 职场文书
教师网络培训感言
2014/03/09 职场文书
培训研修方案
2014/06/06 职场文书
淘宝好评语句大全
2014/12/31 职场文书
项目安全员岗位职责
2015/02/15 职场文书
运动会新闻稿
2015/07/17 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
MySQL派生表联表查询实战过程
2022/03/20 MySQL
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python