Cribbage ES6

This function caculates the score of a 5+ card Cribbage hand using ES6 syntax.

by subskybox

HTML

This function caculates the score of a 5+ card Cribbage hand using ES6 syntax. <br />
See console for assertion failures.

Babel + JSX

function rankCribbageHand(cs, ss) {
  //Initialize
  var points = 0, L = cs.length, dupsArr = new Array(13).fill(0), ccs = cs.map(n=>(++dupsArr[((n-1)%13)+1] && n==14)?1:n);
  var combs = new Array(1<<L).fill().map((_,i)=>ccs.filter((_,j)=>i&(1<<j))), runs = dupsArr.join('').match(/[^0]{3,}/g)||[];

  points += combs.filter(n=>n.reduce((a,b)=>a+(b>10?10:b),0)==15).length*2; //Fifteens		    
  points += ss.slice(0,L-1).every(n=>n==ss[0])?(ss[0]==ss[L-1])?L:L-1:0; //Flush
  points += runs.reduce((a,b)=>a+b.length*b.split('').reduce((i,j)=>i*j,1),0); //Runs
  points += ccs.slice(0,L-1).some((e,i)=>e==11 && ss[i]==ss[L-1]); //Nobs
  points += dupsArr.reduce((a,b)=>a+b*(b-1),0); //Pairs

  return points;
}

//Tests
var A=14, K=13, Q=12, J=11, _ = { "♠":1, "♣":2, "♥":4, "♦":8 };
console.assert(rankCribbageHand([A,2,3,5,6,7],[_["♠"],_["♣"],_["♥"],_["♦"],_["♣"],_["♣"]]) == 14);
console.assert(rankCribbageHand([A,J,5,5,5],[_["♠"],_["♣"],_["♥"],_["♦"],_["♣"]]) == 15);
console.assert(rankCribbageHand([5,J,5,5,5],[_["♠"],_["♣"],_["♥"],_["♦"],_["♣"]]) == 29);
console.assert(rankCribbageHand([A,2,3,4,5],[_["♠"],_["♣"],_["♥"],_["♦"],_["♣"]]) == 7);
console.assert(rankCribbageHand([J,2,3,4,5],[_["♠"],_["♠"],_["♠"],_["♠"],_["♠"]]) == 14);
console.assert(rankCribbageHand([5,2,3,4,J],[_["♠"],_["♠"],_["♠"],_["♠"],_["♠"]]) == 13);
console.assert(rankCribbageHand([J,2,3,4,5],[_["♠"],_["♠"],_["♠"],_["♠"],_["♦"]]) == 12);
console.assert(rankCribbageHand([Q,3,4,4,5],[_["♠"],_["♠"],_["♦"],_["♠"],_["♦"]]) == 10);
console.assert(rankCribbageHand([2,3,3,4,4],[_["♠"],_["♠"],_["♦"],_["♠"],_["♦"]]) == 16);
console.assert(rankCribbageHand([2,4,4,4,4],[_["♠"],_["♠"],_["♦"],_["♣"],_["♥"]]) == 12);
console.assert(rankCribbageHand([2,4,4,4,3],[_["♠"],_["♠"],_["♦"],_["♣"],_["♥"]]) == 17);