检查数组除了一个元素Javascript Dice之外是否有重复项



嗨,我很难实现一个函数,简单地检查一个数组是否有除一之外的所有相同数字。我现在已经尝试了几种方法,但我觉得我一无所获。原因是对于骰子游戏,用户可以选择多个骰子,然后滚动并为重复的数字和其他序列等获得奖励点数。。

我想检查数组中除了一个元素之外是否有所有的双工器会很简单,但我无法让它工作。我在想一些类似于检查aray中的元素,通过使用array.length-1的东西来查看除了一个元素之外的所有元素是否都是相同的值。骰子值为真的示例:

[1,2,2,2] or [4,4,2,4] (for 4 dice) //true
[1,1,6] (for 3 dice )//true

我试过这样的东西:

function countDuplicate(array){
var count=0;
var sorted_array=array.sort();
for (let i=1;i<sorted_array.length;i++)
{
if (sorted_array[i] ==sorted_array[i+1]){
count+=count;}
}
if (count===sorted_array.length-1){
return true;
}
return false;
}

但它似乎不起作用。希望这已经足够抱歉了,我是javascript和stackoverflow的新手。

实现这一点的一种方法是构建数组中每个值的计数数组。然后可以检查该列表,以确保其长度为2,最小计数为1:

const countDuplicate = (array) => {
let counts = Object.values(array.reduce((c, v) =>
(c[v] = (c[v] || 0) + 1, c), {}));
return counts.length == 2 && Math.min(...counts) == 1
}
console.log(countDuplicate([1,2,2,2]));
console.log(countDuplicate([4,4,2,4]));
console.log(countDuplicate([1,1,6]));
console.log(countDuplicate([2,2,4,4]));
console.log(countDuplicate([1,2]));

这是使用Set,它比较原始数组和删除重复数组的长度:

const hasDuplicates = (arr = []) => {
const noDuplicates = [...new Set(arr)];
return arr.length !== noDuplicates.length;
};
console.log(hasDuplicates([1,2,3]));
console.log(hasDuplicates([1,2,3,1]));

如果您只是想检查除了数组中的一个值之外,是否所有值都相同,那么您可以使用它。

function oneMultiple(array) {
const set = new Set(array)
return set.size === 2
}

如果您只想使用一个值请使用此

function oneMultiple(array) {
const set = new Set(array)
return set.size === 2
}

最新更新