Javascript 我如何将重复的数字排列在一起(最好是在一个数组中),并根据它是哪个数字将它们分开?

Javascript 我如何将重复的数字排列在一起(最好是在一个数组中),并根据它是哪个数字将它们分开?,javascript,arrays,Javascript,Arrays,我正在做一个游戏,我想模拟扑克风格的手。手现在是一个由5个值组成的数组。这些值是随机生成的。例如,我的手可能是[1,1,2,4,4],或者我的手可能是[1,2,2,2,6] 我希望能够在hand数组中获取重复的数字,并根据有多少重复项以及有多少组重复项返回一个值。在第一个示例中,1,1是第一组。4,4是第二组。因此,有2组2。在第二个示例中,2、2、2是一组3 从那里,我可以创建一组简单的返回语句。因此,第一个示例将返回“两对”。第二个示例将返回“一类三个” 我试过各种条件下的forEach循环

我正在做一个游戏,我想模拟扑克风格的手。手现在是一个由5个值组成的数组。这些值是随机生成的。例如,我的手可能是[1,1,2,4,4],或者我的手可能是[1,2,2,2,6]

我希望能够在hand数组中获取重复的数字,并根据有多少重复项以及有多少组重复项返回一个值。在第一个示例中,1,1是第一组。4,4是第二组。因此,有2组2。在第二个示例中,2、2、2是一组3

从那里,我可以创建一组简单的返回语句。因此,第一个示例将返回“两对”。第二个示例将返回“一类三个”

我试过各种条件下的forEach循环

比如说,

handCombo() {
        let group1 = [], group2 = [];

        this.hand.forEach((card, index) => {
            //  1. If the index is 0, push the value to the group1
            if (index === 0) {
                group1.push(card.value);
            }
            else if (index > 0 && group1[index - 1] === card) {
                group1.push(card.value);
            }
            else if (index > 0 && group1[index - 1] === card) {
                group1.push(card.value);
            }

        });

当hand=[1,2,2,6]时,将生成一个数组group1=[1]。在这种情况下,我想要的是group1=[2,2,2]。此代码表示重复的数量

let arr = [1, 2, 2, 2, 6];
let groups = {};
for(let num of arr) {
  let numStr = num.toString();
  if (!groups[numStr]) groups[numStr] = 0;
  groups[numStr]++;
}

console.log(groups);

for(let no in groups) {
    console.log("no", no, "have ", groups[no]);
}
如果您想要的是组中的数组。使用此代码

let arr = [1, 2, 2, 2, 6];
let groups = {};
for (let num of arr) {
    let numStr = num.toString();
    if (!groups[numStr]) groups[numStr] = [];
    groups[numStr].push(num);
}

console.log(groups);

for (let no in groups) {
    console.log("no", no, "have ", groups[no]);
}

此代码将回答您的问题。此代码表示重复的数量

let arr = [1, 2, 2, 2, 6];
let groups = {};
for(let num of arr) {
  let numStr = num.toString();
  if (!groups[numStr]) groups[numStr] = 0;
  groups[numStr]++;
}

console.log(groups);

for(let no in groups) {
    console.log("no", no, "have ", groups[no]);
}
如果您想要的是组中的数组。使用此代码

let arr = [1, 2, 2, 2, 6];
let groups = {};
for (let num of arr) {
    let numStr = num.toString();
    if (!groups[numStr]) groups[numStr] = [];
    groups[numStr].push(num);
}

console.log(groups);

for (let no in groups) {
    console.log("no", no, "have ", groups[no]);
}

您可以计算相同的值并返回自定义结果

功能x(手动){
变量计数={},
成对=0,
三=0,
s='';
forEach(v=>count[v]=(count[v]| | 0)+1);
Object.values(count.forEach)(c=>{
如果(c==3)三个++;
如果(c==2)对++;
});
如果(三)s=‘一类三’;
如果(成对===1)s+=(s&&'and')+'1对';
如果(pairs==2)s='Two pairs';
返回s;
}

log([[1,1,2,4,4],[1,2,2,6],[1,1,2,2,2],[1,2,3,4,5].map(x));//“两对”“一种三对”。
您可以计算相同的值并返回自定义结果

功能x(手动){
变量计数={},
成对=0,
三=0,
s='';
forEach(v=>count[v]=(count[v]| | 0)+1);
Object.values(count.forEach)(c=>{
如果(c==3)三个++;
如果(c==2)对++;
});
如果(三)s=‘一类三’;
如果(成对===1)s+=(s&&'and')+'1对';
如果(pairs==2)s='Two pairs';
返回s;
}

log([[1,1,2,4,4],[1,2,2,6],[1,1,2,2,2],[1,2,3,4,5].map(x));//“两对”“一种三对”。
如果与给定数据不同,请添加您的尝试和想要的结果。如果与给定数据不同,请添加您的尝试和想要的结果。您能否解释此条件
(s&&'and')
的工作原理?如果
s
类似于非空字符串,则需要第二个
”和“
。如果
s
是空字符串,则添加空字符串。您能否解释此条件
(s&&'and')
如何工作?如果
s
类似于非空字符串,则需要第二个
”和“
。如果
s
是空字符串,则添加空字符串。