Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • JavaScript

    • js 编码指南
    • 日期使用斜杠 点 中划线分隔的不同
    • forEach 会改变原数组值吗
    • 前端表单验证常用的正则表达式 - reg
    • JS 如何取得 URL 里的参数
    • JavaScript 数组去重
    • JavaScript 循环中断研究与总结-关键字篇
    • JavaScript 循环中断研究与总结-用法篇
    • js 中的 Error
    • 跳出 forEach
    • Location 对象
    • Date 方法预览
    • Reg 正则中的问题
    • JavaScript toFixed() 方法
    • query 和 params 的使用区别
    • axios post 请求中下载文件流
    • 实用的 js 技巧
      • 确保数组的长度
      • 数组映射(不使用 Array.map )
      • 根据条件添加对象属性
      • 解构原始数据
      • 动态设置对象属性名
      • 总结
      • 参考资料
    • JS 之数组的几个不 low 操作
    • 深入浅出深拷贝与浅拷贝
    • 如何实现一个深拷贝
    • 使用 iframe 中的一些问题
    • 在 js 中更好地使用数组
    • echarts 在坐标轴两侧各增加一格坐标
    • 从头认识js的事件循环模型
    • moment 根据周截至日算出指定月有几周及开始结束日期
    • 正则 reg 中 /number 的用法
    • 正则 reg 中 match 和 exec 异同
  • TypeScript

  • Vue

  • ElementUI

  • React

  • AntD

  • 前端
  • JavaScript
Henry
2019-03-12
目录

实用的 js 技巧

每种编程语言都它独特的技巧. 其中很多都是为开发人员所熟知的, 但其中一些相当的 hackish. 在这边篇文章中, 我将向你展示一些我觉得有用的技巧. 其中一些我在实践中使用过, 而另一些则是解决老问题的新方法. Enjoy!

# 确保数组的长度

不知道你是否遇见过这样的情况, 在处理网格结构的时候, 如果原始数据每行的长度不相等, 就需要重新创建该数据. 好吧, 我遇到过! 为了确保每行的数据长度相等, 你可以使用 Array.fill 方法.

let array = Array(5).fill('')
console.log(array) // 输出(5)["", "", "", "", ""]
1
2

# 数组映射(不使用 Array.map )

你知道这里有另外一种方法可以实现数组映射, 而不使用 Array.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)
// 输出 ["Paris", "Lyon", "Marseille", "Rome", "Milan", "Palermo", "Genoa", "Berlin", "Hamburg", "New York"]
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
43
44
45
46

# 根据条件添加对象属性

现在, 你不再需要根据条件创建两个不同的对象, 以使其具有特定属性. 扩展操作符将是一个完美的选择.

const getUser = emailIncluded => {
  return {
    name: 'John',
    surname: 'Doe',
    ...(emailIncluded
      ? {
          email: 'john@doe.com'
        }
      : null)
  }
}

const user = getUser(true)
console.log(user) // 输出 { name: "John", surname: "Doe", email: "john@doe.com" }

const userWithoutEmail = getUser(false)
console.log(userWithoutEmail) // 输出 { name: "John", surname: "Doe" }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 解构原始数据

你曾经有处理过拥有非常多属性的对象吗? 我相信你一定有过. 可能最常见的情况是我们有一个用户对象, 它包含了所有的数据和细节. 这里, 我们可以调用新的 ES 解构方法来处理这个大麻烦. 让我们看看下面的例子.

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
6
7
8
9

通过把上面的对象分成两个, 我们可以用更能传递上下文含义的方式来表示这个对象, 如下所示:

let user = {},
  userDetails = {}
;({ name: user.name, surname: user.surname, ...userDetails } = rawUser)

console.log(user) // 输出 { name: "John", surname: "Doe" }
console.log(userDetails) // 输出 { email: "john@doe.com", displayName: "SuperCoolJohn", joined: "2016-05-05", image: "path-to-the-image", followers: 45 }
1
2
3
4
5
6

# 动态设置对象属性名

在过去, 如果我们需要动态设置对象的属性名, 我们必须首先声明一个对象, 然后再给它分配一个属性. 这不可能以单纯声明的方式实现. 今时不同往日, 现在我们可以通过 ES6 的功能实现这一目标.

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

# 总结

JavaScript 的世界正在迅速扩展. 这里有许多很酷的功能, 可以随时使用. 棘手和耗时的问题正逐渐淡出过去, 而且借助 ES6 的新功能, 我们有了很多开箱即用的新解决方案.

# 参考资料

  • [译]8 个实用的 JavaScript 技巧 - 掘金 (opens new window)
编辑 (opens new window)
#Js
上次更新: 5/27/2023, 1:02:05 PM
axios post 请求中下载文件流
JS 之数组的几个不 low 操作

← axios post 请求中下载文件流 JS 之数组的几个不 low 操作→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式