【发布时间】:2018-06-02 03:12:29
【问题描述】:
我正在尝试使用 Node.js 制作多人扑克游戏,但最近遇到了很多问题。这是一个主要的。此代码应该从数组中识别顺手。但是,我的代码显然不是通用的。我制作了 2 个数组作为测试用例,即使只有一个数组被识别为直线,也会产生不同的结果。请帮忙。
代码如下:
var arr = [9,1,2,11,8,12,10]; // first array
var arr2 = [9,1,8,4,5,3,2]; // second array
var straight = [];
// Removes duplicate elements in an array
/* example:
array = removeDuplicates(array)
*/
function removeDuplicates(arr){
let unique_array = []
for(let i = 0;i < arr.length; i++){
if(unique_array.indexOf(arr[i]) == -1){
unique_array.push(arr[i])
}
}
return unique_array
}
//Sorts the array
arr.sort(function(a,b){return b-a});
//Removes duplicates
arr = removeDuplicates(arr);
// Displays sorted and cleaned up array
console.log(arr)
/*Basic translation: loops through the array
and if the difference between the a term and
the term after it is 1, it will append it to the
array 'straight'. It will break if the difference
is greater than 1. Then it will remove those elements
from the original array and retry to append consecutive
elements in the 'straight' array.
*/
for (var i=1; i<arr.length+1; i++) {
if (arr[i-1] - arr[i] === 1) {
straight.push(arr[i-1],arr[i]); // error occurs at this line
} else if (arr[i-1] - arr[i] > 1){
break; }
if (straight.length === 2) {
arr.splice(arr.indexOf(straight[0]),1)
arr.splice(arr.indexOf(straight[1]),1)
straight = [];
for (var i=1; i<arr.length; i++) {
if (arr[i-1] - arr[i] === 1) {
straight.push(arr[i-1],arr[i]);
}
}
}
};
// There are duplicates and I don't know why sometimes
straight = removeDuplicates(straight)
console.log(straight);
由于某种原因,这不起作用。但是如果你改变它只会对第一个数组正常工作
straight.push(arr[i-1],arr[i]);
到
straight.push(arr[i-1],arr[i],arr[i]);
如果您切换变量名,它仅适用于第二个数组:
var arr2 = [9,1,2,11,8,12,10]; // first array
var arr = [9,1,8,4,5,3,2]; // second array
并在没有进一步更改的情况下运行代码,我不知道为什么会这样。我什至记录了布尔值
arr[i-1] - arr[i] === 1
到控制台(我的意思是在循环中),它连续四次出现(遍历数组的前 5 个索引),所以我不知道为什么它在 11 处停止第一个数组并确定 11-10 不是 1。
【问题讨论】:
-
我想知道为什么你需要变量
straight。您不需要检查每个元素是否大于排序数组中的最后一个元素吗? -
是的,但是我创建了数组
straight,以便我可以操作第一个数组中的元素并将其放入straight,以便以后可以在需要时重用原始数组。
标签: javascript arrays node.js boolean poker