Javascript 如何在for-in循环中使用If语句?
只是想更轻松地使用数组中的嵌套对象和循环中的嵌套对象。一切都按我预期的那样工作,直到我插入一个if语句,那么我就无法在控制台中获得输出true的预期结果 我尝试了各种点/括号符号的混合,以便于访问Javascript 如何在for-in循环中使用If语句?,javascript,arrays,object,for-loop,multidimensional-array,Javascript,Arrays,Object,For Loop,Multidimensional Array,只是想更轻松地使用数组中的嵌套对象和循环中的嵌套对象。一切都按我预期的那样工作,直到我插入一个if语句,那么我就无法在控制台中获得输出true的预期结果 我尝试了各种点/括号符号的混合,以便于访问 const动物=[ { 种类:'宠物', 名单:[ “狗”, “猫”, “兔子”, “沙鼠”, “海龟”, “金丝雀” ] }, { 物种:'野生', 名单:[ “熊”, “狮子”, “鹿”, “老虎”, “美洲狮”, “麋鹿”, “海狸”, “大象”, “犀牛” ] }, { 物种:'海洋', 名
const动物=[
{
种类:'宠物',
名单:[
“狗”,
“猫”,
“兔子”,
“沙鼠”,
“海龟”,
“金丝雀”
]
},
{
物种:'野生',
名单:[
“熊”,
“狮子”,
“鹿”,
“老虎”,
“美洲狮”,
“麋鹿”,
“海狸”,
“大象”,
“犀牛”
]
},
{
物种:'海洋',
名单:[
“鲨鱼”,
“鲑鱼”,
“乌贼”,
‘章鱼’,
“水母”
]
}
];
for(设i=0;i }
要达到预期效果,请使用includes
animals[i][prop].includes('Shark')
问题:代码中的动物[i][prop]返回每个对象属性和值-Shark是数组元素之一
请在下面找到工作代码
const动物=[
{
种类:'宠物',
名单:[
“狗”,
“猫”,
“兔子”,
“沙鼠”,
“海龟”,
“金丝雀”
]
},
{
物种:'野生',
名单:[
“熊”,
“狮子”,
“鹿”,
“老虎”,
“美洲狮”,
“麋鹿”,
“海狸”,
“大象”,
“犀牛”
]
},
{
物种:'海洋',
名单:[
“鲨鱼”,
“鲑鱼”,
“乌贼”,
‘章鱼’,
“水母”
]
}
]
for(设i=0;i }
您还需要迭代数组
const animals=[{物种:宠物,列表:[狗、猫、兔子、沙鼠、海龟、金丝雀]},{物种:野生,列表:[熊、狮子、鹿、虎、美洲狮、麋鹿、海狸、大象、犀牛]},{物种:海洋,列表:[鲨鱼、鲑鱼、鱿鱼、章鱼、水母]}]
for(设i=0;i }
以下是一种利用Array.prototype.forEach
和ES6对象分解的方法:
const动物=[{
种类:'宠物',
名单:[
“狗”,
“猫”,
“兔子”,
“沙鼠”,
“海龟”,
“金丝雀”
]
},
{
物种:'野生',
名单:[
“熊”,
“狮子”,
“鹿”,
“老虎”,
“美洲狮”,
“麋鹿”,
“海狸”,
“大象”,
“犀牛”
]
},
{
物种:'海洋',
名单:[
“鲨鱼”,
“鲑鱼”,
“乌贼”,
‘章鱼’,
“水母”
]
}
];
动物。forEach(功能(el){
变量{
种
列表
}=el;
list.forEach(函数){
如果(s==‘Shark’){
log('foundshark');
}
})
});代码>我想为可能的解决方案添加一种功能性方法:
const animals=[{物种:宠物,列表:[狗、猫、兔子、沙鼠、海龟、金丝雀]},{物种:野生,列表:[熊、狮子、鹿、虎、美洲狮、麋鹿、海狸、大象、犀牛]},{物种:海洋,列表:[鲨鱼、鲑鱼、鱿鱼、章鱼、水母]};
const searchQuery='Shark';
鱼肉功能(动物){
返回动物。列表。包括(搜索查询);
}
函数getKeyPositionFromValue(obj){
返回Object.keys(obj.list).find(key=>obj.list[key]==searchQuery);
}
功能输出(obj){
const output=document.querySelector('.output');
output.innerHTML+=`
${obj.species}物种
在以下位置包含${searchQuery}:
${getKeyPositionFromValue(obj)}
`;
}
动物。过滤器(fishForSharks)。映射(输出)代码>
您可以使用下面的代码
animals.flatMap(a=>a.list).filter(a=>a==='Shark').forEach(a=>console.log('true'))
为每个动物对象返回的道具是species
和list
,您需要迭代每个animal
对象的list
数组对象,并检查是否有“Shark”,因此,基本上,您需要在属性列表中的for in
中使用另一个循环。请注意,您不应该使用for in
:它随附。如果您有一个数组,那么已经有了,因此在外部元素集上使用forEach
,内部元素集使用includes
array@Mike“Pomax”Kamerman我其实想练习循环的数量,但我想把他们弄糊涂了,谢谢你指出这一点!使用阵列时,使用阵列API方法是正确的方法。对于
中的…或
中的…必须求助于通常是有问题的代码的标志(通常你可以更加明确/专注,而不会影响丝毫性能)。@Mike'Pomax'Kamermans我在自学,而术语数组API方法对我来说是陌生的,我一定是在什么地方错过了这一点。我一定会调查的。谢谢!我发现如果我搜索“Pets”或“Wild”,它的计算结果为true,但对于shark,它不会返回true,因为动物[1]是一个数组,所以我需要首先遍历该数组。