Javascript 如果typescript中的对象键是动态的,如何获取值?

Javascript 如果typescript中的对象键是动态的,如何获取值?,javascript,typescript,object,Javascript,Typescript,Object,我有一个对象数组。结构是这样的 animal = [{"cow":{"leg":4,"eye":2}},{"monkey":{"leg":2,"eye":2}}] 这里的第一个键是动态的,就像牛和猴子一样 因此,我的问题是,如果第一个键是动态的,我如何访问键腿?如果您确定数组中的每个对象仅作为一个属性(即动物类型),则可以执行类似操作 animals=[{“奶牛”:{“腿”:4,“眼睛”:2}},{“猴子”:{“腿”:2,“眼睛”:2}]; 为了(让动物中的动物){ 让propName=Ob

我有一个对象数组。结构是这样的

animal = [{"cow":{"leg":4,"eye":2}},{"monkey":{"leg":2,"eye":2}}]
这里的第一个键是动态的,就像牛和猴子一样


因此,我的问题是,如果第一个键是动态的,我如何访问键腿?如果您确定数组中的每个对象仅作为一个属性(即动物类型),则可以执行类似操作

animals=[{“奶牛”:{“腿”:4,“眼睛”:2}},{“猴子”:{“腿”:2,“眼睛”:2}];
为了(让动物中的动物){
让propName=Object.keys(动物)[0];
让结果=动物[propName];

console.log(result);//这将为您提供一个包含每个动物内容的对象数组

animals.map(animal=>animal[Object.keys(animal)[0]]);
是否可以将其转换为“非动态键”对象

const animal=[{“奶牛”:{“腿”:4,“眼睛”:2},{“猴子”:{“腿”:2,“眼睛”:2}]
const newanimal=animal.map(obj=>{
常量键=对象键(obj)
返回keys.map(key=>({key,value:obj[key]}))
}).flat(数学无穷大)
console.log(newanimal)
1)使用该键查找动物

2) 和[动物]一起退

3) 尽可能地使用它(
.leg


您可以使用
map
Object。key
map
将返回一个新数组。
Object。key
用于获取动物数组中每个对象内的所有键。然后此行
elem[getKeys]。leg
将检索leg键的值

let animal=[{
“奶牛”:{
“腿”:4,
“眼睛”:2
}
}, {
“猴子”:{
“腿”:2,
“眼睛”:2
}
}];
让legVal=animal.map((elem)=>{
让getKeys=Object.keys(elem)[0];
返回元素[getKeys].leg
})

console.log(legVal)
您可以使用新添加的
对象.entries
,这在imo中最有意义

因此,对于您的数据,您有:

const animal = ...
for (a of animal) {
    const [animalName, animalDesc] = Object.entries(a)[0]; // assumes there is only one
}

如何确定您想要的是“奶牛”还是“猴子”或其他任何东西?使用
Object.keys()
循环键,并检查每个键的值是否包含
leg
。或者,如果只包含一个键,则无需循环;只需执行
Object.keys(obj)[0]
获取第一个键。或者,更好的是,如果您实际上不需要键名,只想知道
leg
是否存在,请使用
Object.values(obj)[0].leg
。动态是什么意思。您需要在数组中循环,并使用object.keys函数获取键名,然后使用该函数获取数组中的值。如果您不确定这些(猴子、牛…) keys@TylerRoper谢谢,我按照您的建议将其作为一个内联代码段制作。此外,由于提供了数组,它可以工作,但是我将尝试提出一个更好的解决方案。@vivek_23我没有使用
Object.keys()迭代数组
,我只是用它来获取每种动物的钥匙。@DavidFontes啊!!忽略了这一点。@TylerRoper谢谢你的提示!或者我可以使用
flat
来展平数组,尽管你正在使用额外的迭代(
map
->
flat
)与单一的
平面图相比
。不确定效率差异是多少,因此可能可以忽略不计。
const animal = ...
for (a of animal) {
    const [animalName, animalDesc] = Object.entries(a)[0]; // assumes there is only one
}