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
}