Day22【JS】ES6 动态计算属性名 Computed property names

在 ES6 以前,要取得物件只能用
物件.属姓名物件[属姓名] 这样的写法。

其中 [] 内只允许 number 或 string,
如果放入变数,则会自动转成 string。

var attName = 'name';
var p = {
	name : '张三',
	attName : '李四'
}
console.log(p[attName]) // 张三
// 上方等同於呼叫 console.log(p["name"])

Computed property names

在 ES6 以後,则新增了「动态计算属性名」,
允许在定义物件时让变数作为属性名,
实际做法是在 key 外层包覆一个 []

[] 可以使用表达式,
因此除了纯变数外也可进行计算、
使用样板字面值(Template literals)等。


应用范例一

直接使用

const myPropertyName = 'c'

const myObject = {
  a: 5,
  b: 10,
  [myPropertyName]: 15
} 

console.log(myObject.c) // prints 15

[] 内进行计算

const fieldNumber = 3

const myObject = {
  field1: 5,
  field2: 10,
  ['field' + fieldNumber]: 15
}

console.log(myObject.field3) // prints 15

使用样板字面值

const fieldNumber = 3

const myObject = {
  field1: 5,
  field2: 10,
  [`field${fieldNumber}`]: 15
}

console.log(myObject.field3) // prints 15

应用范例二

const classMates = ["Harry", "John", "Tom", "Mary", "Jerry"];
let classMatesList = {}

classMates.forEach((name, id) => {
  classMatesList = {...classMatesList, ['Id' + ++id]: name}
})

console.log(classMatesList); // { Id1: "Harry", Id2: "John", Id3: "Tom", Id4: "Mary", Id5: "Jerry" }

参考资料


<<:  Day23 AR隐形眼镜 实现前的最後几哩路 是坎坷的天堂路还是一路顺风的云霄飞车呢?

>>:  PowerShell--除了CMD你还可以用他追求你想要的Windows

Day 03:如何分析演算法?

上一回讲到两种搜寻演算法,一种是一个一个找,一种则是每次寻找都可以去掉一半的选项,好像有一种是明显比...

Kotlin Android 第29天,从 0 到 ML - TensorFlow Lite - 艺术风格转换(Style Transfer)

前言: (维基)神经风格迁移( NST ) 是指一类软件算法,它们操纵数字图像或视频,以采用另一幅图...

DNS 服务器之间的区域传输(Zone transfer)

-防火墙接口和区域 防火墙通常以两种方式调解网络流量:基於上下文和基於区域。传统的基於上下文的方法...

上场,就是要放手一博 - 认清自己的特质与优势

我们先看看以下这些知名的团队运动的状况: 在棒球的规则中,各国一军日常可以登录25-29名球员,约在...