-1

I have an array in Java Script that I'm trying to split into two arrays using a test within a loop. The console is logging that the two objects are being stored, but after the loop finishes the inhaledArray array only contains one object.

for (var i=0; i<results.length; i++) 
         {
            var inhaledArray = new Array();
            var otherArray = new Array();

            if(results[i].get('MedicationType') == "inhaled")
            {
                //inhaledArray is dumping results
                console.log(results[i]);
                inhaledArray.push(results[i]);
            }
            if(results[i].get('MedicationType') == "other")
            {
                otherArray.push(results[i]);
            }
         }
4

3 に答える 3

4

反復ごとに出力をリセットしています(変数を新しい配列にポイントすることにより)。

配列セットアップ コードをループの外に移動します。

于 2013-01-08T23:41:05.393 に答える
2

アレックスはすでにあなたの質問に答えていますが、ここに提案があります。基本的に同じデータを格納する多数の配列がある場合は、代わりにオブジェクトを使用することを検討してください。

var categories = {};

for (var i = 0; i < results.length; i++) {
    var name = results[i].get('MedicationType');

    if (name in categories) {
        categories[name].push(results[i]);
    } else {
        categories[name] = [results[i]];
    }
}

console.log(categories.inhaled);
console.log(categories.other);

そうすれば、何もハードコーディングしなくても、すべてのカテゴリ タイプを考慮することができます。

于 2013-01-08T23:53:37.533 に答える
1

これは、for ループ内で配列を初期化しているためです。以下のように for ループの前に配列の初期化を移動するだけです。

var inhaledArray = new Array();
var otherArray = new Array();

for (var i = 0; i < results.length; i++) {
    if (results[i].get('MedicationType') == "inhaled") {
        //inhaledArray is dumping results
        console.log(results[i]);
        inhaledArray.push(results[i]);
    }
    if (results[i].get('MedicationType') == "other") {
        otherArray.push(results[i]);
    }
}
于 2013-01-08T23:43:59.217 に答える