Javascript 为什么这个if语句在for循环中创建一个未定义的值?
我创建了这个for循环来收集Javascript 为什么这个if语句在for循环中创建一个未定义的值?,javascript,jquery,if-statement,for-loop,undefined,Javascript,Jquery,If Statement,For Loop,Undefined,我创建了这个for循环来收集中的所有图像。我想一方面收集肖像图像,另一方面收集风景中的图像,很显然,这是可行的 for ( var i = 0; i < imgArray.length; i += 1 ) { var images = [ imgArray ]; // Creates an array with all the images. //Figure out which images are in landscape and in portrait. if (
中的所有图像。我想一方面收集肖像图像,另一方面收集风景中的图像,很显然,这是可行的
for ( var i = 0; i < imgArray.length; i += 1 ) {
var images = [ imgArray ]; // Creates an array with all the images.
//Figure out which images are in landscape and in portrait.
if ( imgArray[i].height < imgArray[i].width ) {
var landscapeImg = [ imgArray[i] ]; // Stores landscape images.
} else if ( imgArray[i].height > imgArray[i].width ) {
var portraitImg = [ imgArray[i] ]; // Stores portrait images.
};
为什么我得到一个未定义的值?为什么循环会再次出现在图像1上
提前感谢:)因为在第一次运行时,只有
if
或else if
中的代码会运行,所以这两个部分不能在一次迭代中一次运行。这就留下了一个有待定义的变量。例如:
if ( true ) {
var landscapeImg = [ imgArray[i] ]; // Stores landscape images.
} else if ( false ) {
var portraitImg = [ imgArray[i] ]; // Stores portrait images.
};
console.log(portraitImg) // logs undefined
console.log(landscapeImg) // logs some defined value
首先,命名提示。它有助于使用一致且有意义的名称。我喜欢对数组和单个项目分别使用复数和单数名称:
images
是图像数组的好名称,image
是单个图像的好名称landscapeImg
对于一组景观图像来说不是一个好名字,因为它听起来像是单个图像的名字imgaray
是图像数组的一个很好的名称,但是如果有很多数组,那么反复重复array
部分会变得很乏味。我的建议是使用复数名称,如images
,以简洁明了
因此,我将在下面的示例中稍微调整名称,并假设输入数组名为images
。如果它已经是一个数组,我们不需要用同样的东西创建另一个数组。此外,我们需要注意方形图像,除非你想将它们组合到肖像或风景中
另一个提示:与其在代码中重复几次imgaray[i]
(或者在下面的代码中是images[i]
),不如将其分配给一个简单变量,使代码更短、更清晰
最后,您要做的是在循环之前创建每个数组,然后将项目推送到循环内适当的数组中。所以它可能看起来像这样:
var squares = [], landscapes = [], portraits = [];
for( var i = 0; i < images.length; i++ ) {
var image = images[i];
if( image.height < image.width ) {
landscapes.push( image );
} else if( image.height > image.width ) {
portraits.push( image );
} else {
squares.push( image );
}
}
var squares=[]、风景=[]、肖像=[];
对于(var i=0;iimage.width){
肖像。推(图像);
}否则{
正方形。推(图像);
}
}
为什么要分配var图像=[imgArray];每次在for语句中:您可以将其放在for循环之前,从而节省一些资源?第25行是哪一行?是的,你说得对,我来做。第24行和第25行只是console.log()
var squares = [], landscapes = [], portraits = [];
for( var i = 0; i < images.length; i++ ) {
var image = images[i];
if( image.height < image.width ) {
landscapes.push( image );
} else if( image.height > image.width ) {
portraits.push( image );
} else {
squares.push( image );
}
}