3

データベースからの一致の部分的な結果を持つオブジェクトを取得します。

[Object { home1=4, away1=3, home2=4, away2=5, home3=6, away3=7, home4=6, away4=5, home5=3, away5=6}]

home1はホームチームの前半戦の結果です、away1 -> アウェイチーム、home2はホームチームの後半戦の結果です...などなど

私の場合のデータは、データベースから取得した各行です。行には、クラス: home1、home2、home3、away1、away2 の td があり、対応する一致部分の値があります。値がデータベースから取得した値と等しいかどうかを確認したい。このようなもの

if ($('.home1') === data[index].home1;
if($('.away2') === data[index].away2;

いくつかのループがあるはずです。これを行う方法がわかりません。配列について考えました

var array = [

                        {
                             home1: data[index].home1,
                             away1: data[index].away1
                        },
                          {
                             home2: data[index].home2,
                             away2: data[index].away2
                        },
                          {
                             home3: data[index].home3,
                             away3: data[index].away3
                        },
                         {
                             home4: data[index].home4,
                             away4: data[index].away4
                        },
                         {
                             home5: data[index].home5,
                             away5: data[index].away5
                        }


                    ]

そして for ループ:

for(var X=0; X<5;X++){
homeX == data[index].homeX 
}

eval関数で変数の名前をインクリメントするにはどうすればよいですか? または他の解決策はありますか?私はとても混乱しています。

4

5 に答える 5

1

演算子 [] を使用してオブジェクトのプロパティにアクセスできます。

for(var i=0; i<array.length; i++)
{
    var item = array[i];
    var homePropertyName = 'home' + (i+1);
    //now you can access homeX property of item using item[homePropertyName]
    //e.g. item[homePropertyName] = data[index][homePropertyName]
}
于 2013-10-16T13:00:34.843 に答える
0

次のように window オブジェクトを介してブラウザーのグローバル プロパティにアクセスできます ( fiddle ):

value1 = "ONE";

alert( window['value'+1] );

しかし、それは良いデザインではありません。JSON オブジェクトを適切にフォーマットする方法を調べる必要があります。

于 2013-10-16T13:03:02.090 に答える
0

次のように、ニーズにより適した少し異なる構造を使用する必要があるかもしれません。

array = [
    0: array [
        "home": "Text for home",
        "away": "Text for away"
    ],

    1: array [
        "home": "",
        "away": ""
    ]
    // More sub-arrays here
];

for ループで初期化することもできます。

var array = new Array();
var i;
for (i = 0; i < 4; i++) {
    array[i] = [
         "home": "",
         "away": ""
    ];
}

またはこのように:

array[0]["home"] = "Text for home";
array[0]["away"] = "Text for away";

この構造をデータ配列にも使用し、for ループを使用してそれらの両方を調べることができます (要素を検索する場合など)。

var result = NULL;
for (i = 0; i < array.length; i++) {
    if (    (array[i]["home"] == data[index]["home"]) &&
            (array[i]["away"] == data[index]["away"])
    ) {
        // Found matching home and away
        result = array[i];
        break;
    }
}
if (result != NULL) {
    alert("Found match: " + result["home"] + " - " + result["away"]);
}
else {
    alert("No match");
}

PS: コードはテストされていません。何か問題がある場合はお知らせください。

于 2013-10-16T12:59:32.193 に答える
0

私はこのようなものを持っています:

for(var i=0; i<2; i++)

{

    var item = ARR[i];

    for(var x=0;x<5;x++){

    var hPropertyName = 'home_p' + (x+1);

    var aPropertyName = 'away_p' + (x+1);

     item[hPropertyName] = ARR[i][hPropertyName];    

      item[aPropertyName] = ARR[i][aPropertyName];

}

配列を作成すると機能します:

 var ARR = [

        {

            home_p1: 4,

            away_p1: 5,

            home_p2: 8,

            away_p2: 9,

            home_p3: 2,

            away_p3: 1,

            home_p4: 5,

            away_p4: 3,

            home_p5: 3,

            away_p5: 2

        },

        {

             home_p1: 6,

            away_p1: 1,

            home_p2: 1,

            away_p2: 2,

            home_p3: 3,

            away_p3: 4,

            home_p4: 5,

            away_p4: 6,

            home_p5: 3,

            away_p5: 2

        }

    ];

しかし、データベースから取得したオブジェクトで作業する必要があるため、配列を作成する必要はありません:

[Object { event_id=19328, home_result=3, away_result=2, home_p1=4, away_p1=3, home_p2=1, away_p2=2 ...... }]

私はこれらのパラメーターにのみ興味があります --> home_p 、 away_p ARR のように見えるように配列にプッシュしたいです。取得したオブジェクトを配列に変換する必要があると思います

于 2013-10-17T07:08:01.503 に答える
0

属性に文字列名を使用している場合は、テンプレート リテラルを使用できますか?

var someObject = {}

for(let i=0 ; i<values.length ; i++){
    someObject[`home${i+1}`] = values[i];
} 

ES5にする必要がある場合は、文字列連結を使用できます。以下は実際の例です。

values = [1,2,3,4,5];

let someObject = {};

for(let i=0 ; i<values.length ; i++){
    someObject[`value${i+1}`]=values[i];
}

console.log(someObject.value1);
console.log(someObject.value2);
console.log(someObject.value3);
console.log(someObject.value4);
console.log(someObject.value5);

于 2018-04-08T13:53:25.953 に答える