对对象进行迭代,查看是否找到相同的值

Iterating over object to see if identical values are found

本文关键字:是否 对象 迭代      更新时间:2024-01-07

我想做下面的语句来搜索对象,看看它们是否包含相同的值。

$.each( winning, function( idx, obj ) {
}); 

我的对象看起来像这样:

var winning = [{1:0, 2:0, 3:0},{4:0, 5:0, 6:0},{7:0, 8:0, 9:0},
                     {1:0, 4:0, 7:0},{2:0, 5:0, 8:0},{3:0, 6:0, 9:0},
                     {1:0, 5:0, 9:0},{7:0, 5:0, 3:0}];

比方说,我想看看对象数组中的一个对象的所有值是否都为1。因此{1:1, 2:1, 3:1}将返回true,而{1:1, 2:0, 3:1}将返回false。这可能吗?我能看到的唯一方法是为每个单独的对象创建大量的循环。我对jQuery或JavaScript不是很熟悉。

尝试:

var winning = [{1:0, 2:0, 3:0},{4:0, 5:0, 6:0},{7:0, 8:0, 9:0},
                     {1:0, 4:0, 7:0},{2:0, 5:0, 8:0},{3:0, 6:0, 9:0},
                     {1:0, 5:0, 9:0},{7:0, 5:0, 3:0},{7:1, 5:1, 3:1},{7:-1, 5:-1, 3:-1},{7:-1, 5:-1, 3:0},{7:2, 5:2, 3:2}];
var len = winning.length;
for(var i=0;i<len;i++){
    var data = winning[i];
    var txt = "";
    var val = [];
    var flg = 1;
    $.each(data,function(k,v){
        val.push(v);
        txt += k+":"+v+" ";
    });
    var vlen = val.length;
    for(var j=0;j<vlen;j++){
        for(var k=j+1;j<vlen;j++){
            if(val[j] != val[k]){
                flg = 0;
                break;
            }
        }
    }
    if(flg == 0){        
        txt += " false";
    }
    else{
        if(val[0] == 0){
            txt += " false";
        }
        else if(val[0] == 1){
            txt += " true 1";
        }
        else if(val[0] == -1){
            txt += " true -1";
        }
        else if(val[0] == 2){
            txt += " true 2";
        }
    }
    $("body").append("<div>"+txt+"</div>");
}

在这里打转

您可以使用hasOwnProperty。。。

function checkForOne()
{
$(winning).each(function(i) {              
 for (var i in this) {
        if(this.hasOwnProperty(i)){
            if(this[i]==1)
            {
                alert("contains 1"); return false;
            }
        }
    }
});
   return true;
}

使用您的示例。。。

$.each( winning, function( idx, obj ) {
    var groupSum = obj.reduce(function(previousValue, currentValue, index, array){
        return previousValue + currentValue;
    });
    if (groupSum == 3 || groupSum == -3) alert('Identicals');
});