关于javascript:Objectkeysvaluesentries

14次阅读

共计 1620 个字符,预计需要花费 5 分钟才能阅读完成。

JavaScript 中的数据结构 SetMapArray 都有 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.valuesfor..of 循环返回所有数的总和
const sumPrice = (salaries) => {
  let sum = 0
  for (let salary of Object.values(salaries)) {sum += salary}
  return sum
}

sumPrice(price) // 650
  • 形式二 :应用 Object.valuesreduce 来求和
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

对象短少许多数组中的办法,如 mapfilter 等。应用 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),它会返回所有键。

正文完
 0