背景
const test = {
[xxxxx]: {
[yyyyy]: [1111]
}
}
给定一个对象,但并多层对象的key是动态的,如何一行代码取最里面的值拿到 [1111] ? 工作中遇到一个字段是动态变化的,无法确定字段的值,所以有了这篇文章。
尝试
const obj = {a:{b:[1111]}}
const [first] = Object.keys(obj)
const aa = obj[first]
const [second] = Object.keys(aa)
const bb = aa[second]
console.log(bb)
// [1111]
const obj = {
a: {
b: [1111]
}
}
const {[Object.keys(obj)]: { [Object.keys(obj[Object.keys(obj)])]: val }} = obj
console.log(val)
// [1111]
但是key有可能是不可枚举的,
我们都知道,Object.keys()返回属性key,但不包括不可枚举的属性,
Reflect.ownKeys()返回所有属性key,
所以
方案
const obj = {
a: {
b: [1111]
}
}
const { [Reflect.ownKeys(key)]: bb } = ({ [Reflect.ownKeys(obj)]: key } = obj, key)
console.log(bb)
// [1111]
简化后其实就是
const obj = {
a: {
b: [1111]
}
}
const { [Reflect.ownKeys(obj)]: key } = obj
const { [Reflect.ownKeys(key)]: bb } = key
console.log(bb)
// [1111]