JavaScript 中的数据结构 Set
、Map
、Array
都有 keys()
,values()
和 entries()
。
一般对象也反对相似的办法,然而语法上有一些不同。
Object.keys()
Object.keys()
返回一个蕴含该对象所有的键的数组。
let user = { name: 'IU', age: 18}const keyList = Object.keys(user) console.log(keyList) // ["name", "age"]
下面的代码返回对象 user
中可用的键列表。
查看数组中是否存在键
能够应用 Array.prototype.includes()
办法查看数组中是否存在键。
const val = 'age'if (keyList.length > 0) { if(keyList.includes(val)){ console.log('存在 key') } else { console.log('不存在 key') }}
计算属性数量
const count = (obj) => Object.keys(obj).lengthcount(user) // 2
判断对象是否为空
const isEmpty = (obj) => Object.keys(obj).length === 0 ? '空' : '非空'console.log(empty(obj)) // "空"console.log(empty(user)) // "非空"
Object.values()
Object.values(obj)
返回一个蕴含该对象所有的值的数组。
let user = { name: 'IU', age: 18}// 遍历所有的值for (let value of Object.values(user)) { console.log(value)}// IU// 18
属性求和
let price = { HTML: 99, JavaScript: 299, CSS: 199}
- 形式一:应用
Object.values
和for..of
循环返回所有数的总和
const sumPrice = (salaries) => { let sum = 0 for (let salary of Object.values(salaries)) { sum += salary } return sum}sumPrice(price) // 650
- 形式二:应用
Object.values
和reduce
来求和
const sumPrice = (salaries) => Object.values(salaries).reduce((a, b) => a + b, 0)sumPrice(price) // 650
Object.entries()
Object.entries(obj)
返回一个蕴含该对象所有 [key, value]
键值对的数组。
let user = { name: 'IU', age: 18}for (const [key, value] of Object.entries(user)) { console.log(`${key}: ${value}`)}// name: IU// age: 18
对象短少许多数组中的办法,如 map
和 filter
等。应用 Object.entries()
将获取一个键值对的数组,它将领有数组的办法:
Object.entries(user).map(([key, value]) => { console.log(`${key}: ${value}`)})// name: IU// age: 18
留神
Object.keys/values/entries
办法都是用 Object.
来调用。
Object.keys/values/entries
会疏忽 symbol
属性
- 就像
for..in
循环一样,这些办法会疏忽应用Symbol(...)
作为键的属性。 - 如果咱们想要
Symbol
类型的键,能够Object.getOwnPropertySymbols()
办法 ,它会返回一个只蕴含Symbol
类型的键的数组。另外,还有一种办法Reflect.ownKeys(obj)
,它会返回所有键。