0

我正在尝试遍历一个数组,它检查每个元素是否为空。如果数组中的所有元素都是空的,并且 output[library] 是空的,那么我不想打印任何东西。如果数组中包含单个元素,我想打印该元素。到目前为止我已经尝试过了,但是程序有一个错误,它没有将参数输出传递给导致错误的 arrayIsEmpty,我也不知道如何遍历每个元素,例如第一次运行可能有一个项目数组,我想打印它,然后我希望它从最后一个位置继续,所以检查位置二是否为空等(我希望我试图通过的东西是有意义的)。

    for (var library in output)
            {
                if (opt.options.showEmpty != true)
                {
                    console.log("It has made it to here 1 ");
                    var check = arrayIsEmpty(output);
                    console.log("It has made it to here 2 ");
                    if ( check == false && output[library] == "" )
                        {
                        console.log("It has made it to here 3 ");
                            continue;
                        }
                    else
                        {
                        console.log("It has made it to here 4 ");
                            console.log(library+ ",[" + output[library]+"]");
                        }
                }
                //console.log(library+ ",[" + output[library]+"]");
            }
        }
    });
}

function arrayIsEmpty(attributes)
{
    console.log("IT HAS MADE IT INTO ARRAYISEMPTY");
    for(var i = 0; i < attributes.length; i++)
    {
        console.log("IT IS NOW IN THE FOR LOOP");
        if (attributes[i] == "")
            {
                console.log("IT SHOULD BE FALSE HERE");
                return false;
            }
        else
            {
            console.log("IT SHOULD BE TRUE HERE");
                return true;
            }`enter code here`
    }

我输入了console.log语句,它正在读取“它已经到达这里1”然后它已经进入arrayISEmpty”然后“它已经到达这里2”然后“它已经到达这里4”所以它不返回 true 或 false

4

2 回答 2

0

您需要移动循环arrayIsEmpty外部。for

console.log("It has made it to here 1 ");
var check = arrayIsEmpty(output);

for(var library in output)
{
    //...
}

否则不会在output.length == 0.

arrayIsEmpty的功能也不会做你想做的事。

function arrayIsEmpty(obj) {

    // Check if array has any items
    var isEmpty = obj.length == 0;

    if(isEmpty) {
        return true;
    }

    isEmpty = true;

    // Make sure each item is not empty
    for(var element in obj) {
        var item = obj[element];
        isEmpty = isEmpty && !!item;
    }

    return isEmpty;
}
于 2013-09-19T13:27:56.627 回答
0

不确定到底是哪种类型output- 它像对象 ( for var library in output) 和数组 ( for var i... attributes[i]) 一样使用。

假设它是一个数组,您可以像这样遍历所有元素(arrayIsEmpty我希望这应该等同于您的 s 中的东西,除了logs ):

attributes.forEach (function (attr) {
    return (attr != "");
});

但我不确定您要做什么 -true并不意味着数组真的是空的。它宁愿为您提供数组中的第一项是否与空字符串不同的信息。

但是,正如其他人已经指出的那样,它似乎output实际上是空的,即不包含任何元素。您可以通过以下方式轻松检查

if (output.length === 0) {...

(是的,就是三个=s。原因看Javascript类型强制。)

一切顺利,诺比

于 2013-09-19T13:45:10.670 回答