avaScript 中的数据结构 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).length
count(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 = (val) => {
  let sum = 0
  for (let salary of Object.values(val)) {
    sum += salary
  }
  return sum
}
sumPrice(price) // 650
  -  方式二:使用 
Object.values和reduce来求和 
const sumPrice = (val) => Object.values(val).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
  注意
Object.keys/values/entries 方法都是用 Object. 来调用。
Object.keys/values/entries 会忽略 symbol 属性
就像
for..in循环一样,这些方***忽略使用Symbol(...)作为键的属性。如果我们想要
Symbol类型的键,可以Object.getOwnPropertySymbols()方法 ,它会返回一个只包含Symbol类型的键的数组。另外,还有一种方法Reflect.ownKeys(obj),它会返回所有键。

京公网安备 11010502036488号