0

配列を反復処理しようとしています。各要素が空かどうかを確認します。配列内のすべての要素が空で、output[library] が空である場合、何も出力したくありません。配列に単一の要素が含まれている場合、その要素を出力したいと思います。私はこれまでにこれを試しましたが、プログラムにはパラメーター出力が arrayIsEmpty に渡されないというバグがあり、エラーが発生しています。また、各要素を反復処理する方法もわかりません。配列、私はそれを印刷したい、そして最後の位置から続けたいので、位置2が空かどうかなどを確認してください(私がやり遂げようとしていることが意味をなすことを願っています)。

    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 を除いて、あなたの のものと同等であるはずですlog):

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

しかし、あなたが何をしようとしているのかわからない -true配列が本当に空であることを意味するわけではありません。むしろ、配列の最初の項目が空の文字列とは異なるものであるかどうかの情報を提供します。

しかし、他の人がすでに指摘しているようにoutput、実際には空である、つまり要素が含まれていないようです。で簡単に確認できます

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

(はい、それは 3 つの = です。その理由については、Javascript 型強制を参照してください。)

のびさん、こんばんわ

于 2013-09-19T13:45:10.670 に答える