Javascript 为什么这个if语句在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循环来收集
中的所有图像。我想一方面收集肖像图像,另一方面收集风景中的图像,很显然,这是可行的

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 );
    }
}