8 个有用的 JS 技巧

1. 确保数组值

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

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

2. 获取数组唯一值

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

 1 const cars = [
 2     ‘Mazda‘,
 3     ‘Ford‘,
 4     ‘Renault‘,
 5     ‘Opel‘,
 6     ‘Mazda‘
 7 ]
 8 const uniqueWithArrayFrom = Array.from(new Set(cars));
 9 console.log(uniqueWithArrayFrom); // outputs ["Mazda", "Ford", "Renault", "Opel"]
10
11 const uniqueWithSpreadOperator = [...new Set(cars)];
12 console.log(uniqueWithSpreadOperator);// outputs ["Mazda", "Ford", "Renault", "Opel"]

3.使用展开运算符合并对象和对象数组

对象合并是很常见的事情,我们可以使用新的ES6特性来更好,更简洁的处理合并的过程。

 1 // merging objects
 2 const product = { name: ‘Milk‘, packaging: ‘Plastic‘, price: ‘5$‘ }
 3 const manufacturer = { name: ‘Company Name‘, address: ‘The Company Address‘ }
 4
 5 const productManufacturer = { ...product, ...manufacturer };
 6 console.log(productManufacturer);
 7 // outputs { name: "Company Name", packaging: "Plastic", price: "5$", address: "The Company Address" }
 8
 9 // merging an array of objects into one
10 const cities = [
11     { name: ‘Paris‘, visited: ‘no‘ },
12     { name: ‘Lyon‘, visited: ‘no‘ },
13     { name: ‘Marseille‘, visited: ‘yes‘ },
14     { name: ‘Rome‘, visited: ‘yes‘ },
15     { name: ‘Milan‘, visited: ‘no‘ },
16     { name: ‘Palermo‘, visited: ‘yes‘ },
17     { name: ‘Genoa‘, visited: ‘yes‘ },
18     { name: ‘Berlin‘, visited: ‘no‘ },
19     { name: ‘Hamburg‘, visited: ‘yes‘ },
20     { name: ‘New York‘, visited: ‘yes‘ }
21 ];
22
23 const result = cities.reduce((accumulator, item) => {
24   return {
25     ...accumulator,
26     [item.name]: item.visited
27   }
28 }, {});
29
30 console.log(result);
31 /* outputs
32 Berlin: "no"
33 Genoa: "yes"
34 Hamburg: "yes"
35 Lyon: "no"
36 Marseille: "yes"
37 Milan: "no"
38 New York: "yes"
39 Palermo: "yes"
40 Paris: "no"
41 Rome: "yes"
42 */

4. 数组 map 的方法 (不使用Array.Map)

另一种数组 map 的实现的方式,不用 Array.map

Array.from 还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:

 1 const cities = [
 2     { name: ‘Paris‘, visited: ‘no‘ },
 3     { name: ‘Lyon‘, visited: ‘no‘ },
 4     { name: ‘Marseille‘, visited: ‘yes‘ },
 5     { name: ‘Rome‘, visited: ‘yes‘ },
 6     { name: ‘Milan‘, visited: ‘no‘ },
 7     { name: ‘Palermo‘, visited: ‘yes‘ },
 8     { name: ‘Genoa‘, visited: ‘yes‘ },
 9     { name: ‘Berlin‘, visited: ‘no‘ },
10     { name: ‘Hamburg‘, visited: ‘yes‘ },
11     { name: ‘New York‘, visited: ‘yes‘ }
12 ];
13
14 const cityNames = Array.from(cities, ({ name}) => name);
15 console.log(cityNames);
16 // outputs ["Paris", "Lyon", "Marseille", "Rome", "Milan", "Palermo", "Genoa", "Berlin", "Hamburg", "New York"]

5. 有条件的对象属性

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

nst getUser = (emailIncluded) => {
  return {
    name: ‘John‘,
    surname: ‘Doe‘,
    ...emailIncluded && { email : ‘[email protected]‘ }
  }
}

const user = getUser(true);
console.log(user); // outputs { name: "John", surname: "Doe", email: "[email protected]" }

const userWithoutEmail = getUser(false);
console.log(userWithoutEmail); // outputs { name: "John", surname: "Doe" }

6. 解构原始数据

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

const rawUser = {
   name: ‘John‘,
   surname: ‘Doe‘,
   email: ‘[email protected]‘,
   displayName: ‘SuperCoolJohn‘,
   joined: ‘2016-05-05‘,
   image: ‘path-to-the-image‘,
   followers: 45
   ...
}

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

1 let user = {}, userDetails = {};
2 ({ name: user.name, surname: user.surname, ...userDetails } = rawUser);
3
4 console.log(user); // outputs { name: "John", surname: "Doe" }
5 console.log(userDetails); // outputs { email: "[email protected]", displayName: "SuperCoolJohn", joined: "2016-05-05", image: "path-to-the-image", followers: 45 }

7. 动态属性名

早期,如果属性名需要是动态的,我们首先必须声明一个对象,然后分配一个属性。这些日子已经过去了,有了ES6特性,我们可以做到这一点。

1 const dynamic = ‘email‘;
2 let user = {
3     name: ‘John‘,
4     [dynamic]: ‘[email protected]‘
5 }
6 console.log(user); // outputs { name: "John", email: "[email protected]" }

8.字符串插值

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

 1 const user = {
 2   name: ‘John‘,
 3   surname: ‘Doe‘,
 4   details: {
 5     email: ‘[email protected]‘,
 6     displayName: ‘SuperCoolJohn‘,
 7     joined: ‘2016-05-05‘,
 8     image: ‘path-to-the-image‘,
 9     followers: 45
10   }
11 }
12
13 const printUserInfo = (user) => {
14   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.`
15   console.log(text);
16 }
17
18 printUserInfo(user);
19 // outputs ‘The user is John Doe. Email: [email protected] Display Name: SuperCoolJohn. John has 45 followers.‘


原文地址:https://www.cnblogs.com/Object-L/p/12200775.html

时间: 2024-07-30 15:43:57

8 个有用的 JS 技巧的相关文章

7个有用的JS技巧

就如其他的编程语言一样,JavaScript也具有许多技巧来完成简单和困难的任务. 一些技巧已广为人知,而有一些技巧也会让你耳目一新. 让我们来看看今天可以开始使用的七个JavaScript技巧吧! 数组去重 使用ES6全新的数据结构即可简单实现. var j = [...new Set([1, 2, 3, 3])] 输出: [1, 2, 3] Set的详细用法可以查看ES6入门 数组和布尔值 当数组需要快速过滤掉一些为false的值(0,undefined,false等)使,一般是这样写: m

冷门JS技巧

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开

超有用的JavaScript技巧,窍门和最佳实践

超有用的JavaScript技巧,窍门和最佳实践 1. 首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2. 使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. [10] === 10 // is false [10] == 10 // is true '10' == 10 // is true '10' === 10 //

你应该知道的25个非常有用的CSS技巧

在我们的前端CSS编码当中,经常要设置特殊的字体效果,边框圆角等等,还要考虑兼容性的问题, CSS网页布局,说难,其实很简单. 说它容易,往往有很多问题困扰着新手,在中介绍了非常多的技巧,这些小技巧与知识能事半功倍的给大家以帮助,经验丰富的CSS程序员通常都知道这一点,但初学者不要错过了! 这里有25个非常有用的CSS技巧,将帮助你解决让你棘手的CSS代码问题.你可以直接使用到你现在的项目当中 1.更改文本突出显示颜色(Change Text Highlight Color) 您可能不知道!使用

js技巧--转义符"\"的妙用

js技巧--转义符"\"的妙用 // blueDestiny, never-online // blueDestiny [at] 126.com 通常,我们在动态给定一个container的innerHTML时,通常是样做的: <div id="divc" /> <SCRIPT LANGUAGE="JavaScript"> var div = document.getElementById("divc"

大部分教程不会告诉你的 12 个 JS 技巧

from:https://www.infoq.cn/article/eSYzcMZK4PkOzZC_68fv 在这篇文章中,作者将分享 12 个非常有用的 JavaScript 技巧,可以帮助你写出简洁且高性能的代码. 1. 过滤唯一值 ES6 引入了 Set 对象和延展(spread)语法-,我们可以用它们来创建一个只包含唯一值的数组. 复制代码 const array = [1, 1, 2, 3, 5, 5, 1] const uniqueArray = [...new Set(array

提升开发幸福感的10条JS技巧

总结一些能够提高开发效率的JS技巧,这些技巧很实用,觉得挺好,想推荐给大家,所以有了这篇文章. 生成随机UID const genUid = () => { var length = 20 var soupLength = genUid.soup_.length var id = [] for (var i = 0; i < length; i++) { id[i] = genUid.soup_.charAt(Math.random() * soupLength) } return id.jo

12个非常有用的javascript技巧,必看!

提示:该文章是整理别人别人的文章,作者比较多,很难分辨原创作者是谁. 1)使用!!将变量转换成布尔类型 有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将他们的值视为true.对于这样的检查,你可以使用!!(双重否定运算符),他能自动将任何类型的数据转化为布尔值,只有0.null."".undefined或NaN才会返回false,其他的都会返回true.看一个简单的例子: function Account(cash){ this.cash = cash; this.ha

转载:冷门js技巧

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来.现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容. HTML篇 浏览器地址栏运行JavaScript代码 这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开