Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找具有条件的数组对象序列_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 查找具有条件的数组对象序列

Javascript 查找具有条件的数组对象序列,javascript,jquery,arrays,Javascript,Jquery,Arrays,因为我在做一个拉米纸牌游戏,所以我在融合纸牌时要检查三个条件 找到一组具有相同套装的纯序列。(强制性) 找到一组具有相同套装的纯或不纯序列(没有或有小丑) 寻找一组具有纯序列或非纯序列或具有不同套色的相同价值卡 纯序列平均值:3,4,5,6 不纯序列意味着:3,4,小丑,6(这里小丑可以被认为是5) 让我们来处理案例1 我的群组是: var arr4 = [{"value":2,"suit":"hearts"},{"value":5,"suit":"hearts"},{"value":3,"su

因为我在做一个拉米纸牌游戏,所以我在融合纸牌时要检查三个条件

  • 找到一组具有相同套装的纯序列。(强制性)
  • 找到一组具有相同套装的纯或不纯序列(没有或有小丑)
  • 寻找一组具有纯序列或非纯序列或具有不同套色的相同价值卡
  • 纯序列平均值:3,4,5,6 不纯序列意味着:3,4,小丑,6(这里小丑可以被认为是5)

    让我们来处理案例1

    我的群组是:

    var arr4 = [{"value":2,"suit":"hearts"},{"value":5,"suit":"hearts"},{"value":3,"suit":"hearts"},{"value":4,"suit":"spades"}];
    
    var arr5 = [{"value":5,"suit":"hearts"},{"value":7,"suit":"hearts"},{"value":20,"suit":"joker"},{"value":8,"suit":"hearts"}];
    
    var arr6 = [{"value":1,"suit":"hearts"},{"value":2,"suit":"hearts"},{"value":4,"suit":"hearts"},{"value":3,"suit":"hearts"}];
    
    var arr7 = [{"value":1,"suit":"diams"},{"value":4,"suit":"hearts"},{"value":4,"suit":"hearts"},{"value":3,"suit":"hearts"}];
    
    在这里,
    arr6
    是一个纯粹的序列,因为每个项目都有相同的套装<代码>arr4不包含所有相同的套装,因此它不是

    用于案例1

    我试着找到一个纯序列的数组,没有这样的套装

    var arr1=[“4”、“1”、“3”、“5”];
    var arr2=[“5”、“4”、“3”、“6”];
    var arr3=[“1”、“5”、“3”、“6”];
    函数inSeq(arr){
    return arr.sort(函数(a,b){return a-b;})
    .each(函数(n,i,arr){
    返回i==0 | | n-arr[i-1]==1;
    });
    }
    函数findArrWithSeq(arrs){
    对于(变量i=0;i
    我可以建议您使用吗

    var arr4=[{“value”:2,“suit”:“hearts”},{“value”:5,“suit”:“hearts”},{“value”:3,“suit”:“hearts”},{“value”:4,“suit”:“spades”};
    var arr5=[{“价值”:5,“诉讼”:“心脏”},{“价值”:7,“诉讼”:“心脏”},{“价值”:20,“诉讼”:“小丑”},{“价值”:8,“诉讼”:“心脏”}];
    var arr6=[{“值”:1,“适合”:“心”},{“值”:2,“适合”:“心”},{“值”:4,“适合”:“心”},{“值”:3,“适合”:“心”};
    var arr7=[{“值”:1,“适合”:“直径”},{“值”:4,“适合”:“心脏”},{“值”:4,“适合”:“心脏”},{“值”:3,“适合”:“心脏”}];
    var arr8=[{“值”:1,“套装”:“钻石”},{“值”:12,“套装”:“钻石”},{“值”:11,“套装”:“钻石”},{“值”:13,“套装”:“钻石”};//另一种捕获条件
    函数inSeq(arr){//与inSeq()方法相同
    //log(JSON.stringify(arr));
    返回u.every(arr,function(n,i,arr){
    //log(JSON.stringify(n)+“:”+i);
    返回i==0 | | n.value-arr[i-1]。value==1 | |(arr[0]。value==1&&(n.value==11 | | n.value==12));//检查“另一个捕获”
    });
    }
    功能检查PureSeq(arr,套装){
    var sCards=..where(arr,{suit:suit});//获取特定suit的所有卡片
    //控制台。原木(伤疤。长度);
    如果(sCards.length<3 | | sCards.length!=arr.length){//如果同一套卡片小于3或者长度与原始数组长度不匹配,则返回false……这意味着您不需要检查卡片是否按顺序排列
    返回false;
    }
    sCards=..sortBy(sCards,'value');//根据'value'对同一套牌的所有牌进行排序
    返回inSeq(疤痕);
    }
    函数日志(str){//只是一个util函数。我正在屏幕上显示它。你们可以把它放在控制台上
    //console.log(str);
    $('').html(str).appendTo('#output');
    }
    $(函数(){
    var arrs=[arr4,arr5,arr6,arr7,arr8];//数组数组,只是为了便于处理,与您在问题中创建[arr1,arr2,arr3]的方式类似
    var suits=[‘红心’、‘钻石’、‘黑桃’、‘梅花’];
    _.each(arrs,function(arr,i){//处理每个数组
    //log(JSON.stringify(arr));
    _.每一套{//
    //控制台日志(套装);
    如果(检查pureSeq(arr,suit)){
    log('找到'+suit+'的纯序列:'+JSON.stringify(arr)+'');
    }否则{
    log('未找到'+suit+'的纯序列:'+JSON.stringify(arr));
    //您可以将当前“arr”推送到另一个数组,以便进一步处理案例2和案例3
    }
    });
    });
    });
    
    工作演示可以找到


    注意:它只处理第一种情况(包括您定义的“另一个陷阱”)

    我的2美分将是使用一个汇总函数来处理一个卡阵列,以处理所有情况:

    函数getSummary(卡片){
    cards.sort((c1,c2)=>c1.value-c2.value);//按值对卡片进行排序
    让jokerCount=0,JokerUsed=0,res;
    for(设i=cards.length-1;i>=0;i--)//首先从末尾开始处理小丑(注意,这是假设他们也有较大的值20)
    {
    让{suit,value:val}=cards[i];//将suit和value属性分解为变量
    如果(西装==“小丑”)
    jokerCount++;//分别处理小丑
    否则{
    如果(res==未定义){//第一张非小丑卡->初始值
    res={uniqueSuit:suit,startOfSequence:val};
    if(jokerCount)res.jokersUsed=true;
    }
    否则{
    if(suit!==res.uniqueSuit)//检查是否有更多的西装
    删除res.uniqueSuit;//没有唯一的suit->删除属性(可选:将道具设置为“无”)
    如果(res.startOfSequence&--res.startOfSequence!=val){//检查序列是否完整
    if(val==1&&i==0&&res.startOfSequence==10)//Ace
    res.startOfSequence++;//Ace用作14
    否则{
    设间隙=res.startOfSequence-val;
    如果(间隔>0&&jokerCount>=gap){//如果还有足够的小丑,使用他们(序列仍然完整)
    jokerCount-=缺口;
    jokersUsed+=间隙;
    res.startOfSequence=val;
    }
    其他的
    删除res.startOfSequence;//无序列->从res中删除属性
    }
    }
    }
    }
    }
    如果(res==未定义){
    //只有小丑(这可能吗?->创建序列或匹配值
    res={};
    
    var arr4 = [{"value":2,"suit":"hearts"},{"value":5,"suit":"hearts"},{"value":3,"suit":"hearts"},{"value":4,"suit":"spades"}];
    
    var arr5 = [{"value":5,"suit":"hearts"},{"value":7,"suit":"hearts"},{"value":20,"suit":"joker"},{"value":8,"suit":"hearts"}];
    
    var arr6 = [{"value":1,"suit":"hearts"},{"value":2,"suit":"hearts"},{"value":4,"suit":"hearts"},{"value":3,"suit":"hearts"}];
    
    var arr7 = [{"value":1,"suit":"diams"},{"value":4,"suit":"hearts"},{"value":4,"suit":"hearts"},{"value":3,"suit":"hearts"}];
    
    var arr8 = [{"value":1,"suit":"diams"},{"value":12,"suit":"diams"},{"value":11,"suit":"diams"},{"value":13,"suit":"diams"}]; // another catch condition
    
    function inSeq(arr) { // identical to your inSeq() method
      //console.log(JSON.stringify(arr));
      return _.every(arr, function(n, i, arr) {
        //console.log(JSON.stringify(n) + ":" + i);
        return i === 0 || n.value - arr[i - 1].value === 1 || (arr[0].value == 1 && (n.value == 11 || n.value == 12)); // checking for 'another catch'
      });
    }
    
    function checkPureSeq(arr, suit){
      var sCards = _.where(arr, {suit: suit}); // get all the cards of specific suit
      //console.log(sCards.length);
      if(sCards.length < 3 || sCards.length != arr.length) { // if same suit cards are less than 3 or the length doesn't match the original array length return false ... meaning you don't need to check if the cards are in sequence
        return false;
      }
    
      sCards = _.sortBy(sCards, 'value'); // sort all the cards of same suit based on 'value'
      return inSeq(sCards);
    }
    
    function log(str){ // just a util function. I'm displaying it on screen. You can put it on console
      //console.log(str);
      $('<div>').html(str).appendTo('#output');
    }
    
    $(function(){
      var arrs = [arr4, arr5, arr6, arr7, arr8]; // array of arrays, just for ease of processing, similar to the way you had created [arr1, arr2, arr3] in your question
      var suits = ['hearts', 'diams', 'spades', 'clubs'];
      _.each(arrs, function(arr, i){ // process each array
        //console.log(JSON.stringify(arr));
        _.each(suits, function(suit){ // for each suit
        //console.log(suit);
          if(checkPureSeq(arr, suit)){ 
            log('<h4>Found pure sequence of ' + suit + ': ' + JSON.stringify(arr) + '</h4>');
          } else {
            log('Pure sequence of ' + suit + ' not found: ' + JSON.stringify(arr));
            // you may push current `arr` to another array for further processing of case 2 and case 3
          }
        });
      });
    });