Я пытаюсь сделать многопользовательскую игру в покер на 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.