0

一意のオブジェクトで配列を作成しようとしています。プールごとに注文したいトーナメントから json データを取得しました。各試合は独自のプールデータを取得したため、各試合のプールデータを配列にプッシュします。これにより、同じプール値の 5 つの配列が作成されます。これは私のコードです:

var arr = [];
for (var i = 0; i < data.objects.length; i++){
    obj = {
        poolId: data.objects[i].pool.id,
        poolLetter: data.objects[i].pool.name
    };

    if (arr.indexOf(obj) == -1) {
        arr.push(obj); 
    }else{} 
}
4

4 に答える 4

1

問題はobj、ループで生成している が配列内の同じオブジェクトにならないことです。それらは異なる署名を持つため、このインスタンスでarrは使用できません。indexOf

代わりに、配列をループして、同じorarrを持つ要素が見つかるかどうかを確認する必要があります。poolIdpoolLetter

var arr = [];
for (var i = 0; i < data.objects.length; i++){
    obj = {
        poolId: data.objects[i].pool.id,
        poolLetter: data.objects[i].pool.name
    };

    // Do the insert if arr doesn't already contain this poolId    
    if(!arrayContains(arr, obj.poolId)) arr.push(obj);
}

// Helper function to find an instance of poolId in the given array
function arrayContains(arr, poolId) {
    for(var x = 0; x < arr.length; x++) {
        if(arr[x].poolId === poolId) {
            return true;
        }
    }
    return false;
}

これは、上記を示すフィドルです。

于 2013-10-25T12:24:23.517 に答える
0

jQuery ソリューションもあります。jQueryの回答を求めていないことは知っています。しかし、多分あなたはそれを使いたいです。

jQuery.inArray() は、指定された値のインデックスを返し、見つからない場合は -1 を返します。

http://api.jquery.com/jQuery.inArray/

于 2013-10-25T12:37:49.357 に答える
0

Array Prototypeを使用できます。オブジェクトを渡すだけです。

Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
    if (this[i] === obj) {
        return true;
    }
}
return false;
}

以下を使用します

alert([1, 2, 3].contains(2)); //true
alert([1, 2, 3].contains('2')); //false
于 2013-10-25T12:28:49.887 に答える