嗨,我在努力实现一个函数,只需检查一个数组是否除了一个数字之外都有相同的数字。我现在已经尝试了几种方法,我觉得我什么也做不到。这是因为一个骰子游戏,用户可以选择一些骰子,然后滚动和得分的重复数字和其他序列加分,等等。
我认为检查数组中除了数组中的一个元素之外是否有所有的重复,这很简单,但我无法让它工作。我在想一些东西,比如检查aray中的元素,看看除了一个元素,所有元素是否都是相同的值,方法是使用array.ength-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和堆栈溢出来说已经足够抱歉了。
发布于 2020-11-23 21:46:18
实现此功能的一种方法是构建数组中每个值的计数数组。然后可以检查此列表,以确保其长度为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]));
发布于 2020-11-23 21:33:00
如果您只是想检查除了数组中的值之外,所有值是否相同,则只需使用以下内容即可。
function oneMultiple(array) {
const set = new Set(array)
return set.size === 2
}发布于 2020-11-23 21:34:12
它使用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]));
https://stackoverflow.com/questions/64976650
复制相似问题