前端开发总结的一些技巧和实用方法(2)

痛定思痛。 2023-10-04 22:49 177阅读 0赞

0d8bc4bd78fadde0a19e3a4953197f0d.jpeg

本文主要介绍一些JS中用到的小技巧和实用方法,可以在日常Coding中提升幸福度,也可以通过一些小细节来增加代码可读性,让代码看起来更加优雅,后续将不断更新

1.数组 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. const cityNames = Array.from(cities, ({ name}) => name);
  14. console.log(cityNames);
  15. //["Paris", "Lyon", "Marseille", "Rome", "Milan", "Palermo", "Genoa", "Berlin", "Hamburg", "New York"]

Copy

2.有条件的对象属性

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

  1. let getUser = (emailIncluded) => {
  2. return {
  3. name: 'John',
  4. surname: 'Doe',
  5. ...emailIncluded && { email : 'john@doe.com' }
  6. }
  7. }
  8. const user = getUser(true);
  9. console.log(user); // outputs { name: "John", surname: "Doe", email: "john@doe.com" }
  10. const userWithoutEmail = getUser(false);
  11. console.log(userWithoutEmail); // outputs { name: "John", surname: "Doe" }

Copy

3. 动态属性名

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

Copy

4.函数默认参数妙用

场景:假设我们又如下的初始化工作需要进行,在代码的最开始我们需要对config对象进行初始化工作

  1. function initConfig(config) {
  2. config.map((item) => {
  3. item.content = Number(item.content)
  4. })
  5. }

Copy

如果我们不小心忘记给它传递参数,浏览器会报如下错误,提示我们 config 没有 map 方法,因为此时 config 为 undefined

解决办法:

我们可以给函数的参数加上一个默认的值

  1. function initConfig(config = []) {
  2. config.map((item) => {
  3. item.content = Number(item.content)
  4. })
  5. }

Copy

5.监听DOM元素是否在可视区域内

场景:如果打开网页,DOM元素在可视区域内,就不展示一个div,反之如果需要滑动网页才能让这个DOM元素出现在可视区域,就展示这个div。这里分享一个vue的做法。

  1. mounted(){
  2. let recommend = document.getElementById('replyList'),that = this;
  3. let observer = new IntersectionObserver(function(entries){
  4. entries.forEach( function(element, index) {
  5. if (element.isIntersecting ) {
  6. //用recommendShow这个布尔值来控制DOM是否显示
  7. that.recommendShow = false;
  8. } else {
  9. that.recommendShow = true;
  10. }
  11. });
  12. }, {
  13. root: null,
  14. threshold:[0, 1]
  15. });
  16. observer.observe(recommend)
  17. }

Copy

16.谷歌浏览器A标签跳转新标签导致sessionStorage无效

解决方法:主动添加 rel=”opener” 属性即可,如下。

  1. 跳转

Copy

17.Array.find

如果你曾经编写过普通 JavaScript 中的 find 函数,那么你可能使用了 for 循环。在 ES6 中,介绍了一种名为 find()的新数组函数,可以实现 for 循环的简写。

  1. const pets = [
  2. { type: 'Dog', name: 'Max'},
  3. { type: 'Cat', name: 'Karl'},
  4. { type: 'Dog', name: 'Tommy'},
  5. ]
  6. function findDog(name) {
  7. for(let i = 0; i

Copy

简写为

  1. let = pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
  2. console.log(pet); // { type: 'Dog', name: 'Tommy' }

Copy

8.数组提取不重复的新值

如果有下面两个数组,需要提取第二个中与第一个数组中不重复的新值,也就是单独把5,6提取出来

  1. let arr1 = [1,2,3];
  2. let arr2 = [2,5,6];
  3. let arr3 = [];
  4. arr2.forEach(item=>{
  5. if(!arr1.includes(item)){
  6. arr3.push(item);
  7. }
  8. })
  9. console.log(arr3);//[5,6]

发表评论

表情:
评论列表 (有 0 条评论,177人围观)

还没有评论,来说两句吧...

相关阅读