Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在for-in循环中使用If语句?_Javascript_Arrays_Object_For Loop_Multidimensional Array - Fatal编程技术网

Javascript 如何在for-in循环中使用If语句?

Javascript 如何在for-in循环中使用If语句?,javascript,arrays,object,for-loop,multidimensional-array,Javascript,Arrays,Object,For Loop,Multidimensional Array,只是想更轻松地使用数组中的嵌套对象和循环中的嵌套对象。一切都按我预期的那样工作,直到我插入一个if语句,那么我就无法在控制台中获得输出true的预期结果 我尝试了各种点/括号符号的混合,以便于访问 const动物=[ { 种类:'宠物', 名单:[ “狗”, “猫”, “兔子”, “沙鼠”, “海龟”, “金丝雀” ] }, { 物种:'野生', 名单:[ “熊”, “狮子”, “鹿”, “老虎”, “美洲狮”, “麋鹿”, “海狸”, “大象”, “犀牛” ] }, { 物种:'海洋', 名

只是想更轻松地使用数组中的嵌套对象和循环中的嵌套对象。一切都按我预期的那样工作,直到我插入一个if语句,那么我就无法在控制台中获得输出true的预期结果

我尝试了各种点/括号符号的混合,以便于访问

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]是一个数组,所以我需要首先遍历该数组。