проверить, совпадают ли хотя бы 4 последовательных элемента массива - javascript - PullRequest
0 голосов
/ 26 апреля 2020

Здравствуйте, я должен проверить массивы (все имеют одинаковую длину), которые имеют одинаковые элементы (ноль в mycase) по крайней мере в 4 последовательных позициях. и верните true, если это так.

Пример,

Arr1 = ["a","","b","c","","","","","d"]; // if array is like this it should return - True
Arr1 = ["","","","","","a","b","c","d"]; // if it is like this it should return - True
Arr1 = ["p","q","","r","","","s","",""]; // if it is like this it should return - False

Есть идеи ?? Помогите, пожалуйста, сообщите или предложите какой-нибудь код в приведенной ниже функции, чтобы выполнить это требование в javascript

function checkForSameConsecutives(arr) {

 //somecode here 

 // if condition to return true/false;
};
checkForSameConsecutives(Arr1);

Ответы [ 5 ]

2 голосов
/ 26 апреля 2020

Вы можете взять замыкание над счетчиком c, проверить значение и сбросить значение, если значение истинно, или добавить его. Затем верните результат проверки нужной длины.

const check = array => (c => array.some(v => (c = v ? 0 : c + 1) === 4))(0);

console.log(check(["a", "", "b", "c", "", "", "", "", "d"]));
console.log(check(["", "", "", "", "", "a", "b", "c", "d"]));
console.log(check(["p", "q", "", "r", "", "", "s", "", ""]));
1 голос
/ 26 апреля 2020

Здесь вы go:

function checkForSameConsecutives(haystack, needle, howMany) {
  let counter = 0;
  for (const el of haystack) {
    if (el === needle) {
      counter++;
      if (counter === howMany) {
        return true;
      }
    } else {
      counter = 0;
    }
  }
  return false;
}

Аргументы функции:

haystack - массив для поиска

needle - что вы поиск

howMany - сколько хитов вам нужно

0 голосов
/ 26 апреля 2020

Я надеюсь, что следующий простой код поможет вам

function checkForSameConsecutives(arr) {
            var count = 0;
            var isFound = false;
            for (var i = 1; i < arr.length; i++) {
                if (arr[i] == arr[i - 1]) {
                    count++;
                    if (count == 3) {
                        isFound = true;
                        break;
                    }
                }
            }
            return isFound;
        }

Это не лучшее решение, но оно может помочь вам начать.

0 голосов
/ 26 апреля 2020

Попробуйте это

Arr1 = ["a","","b","c","","","","","d"]; // if array is like this it should return - True
Arr2 = ["","","","","","a","b","c","d"]; // if it is like this it should return - True
Arr3 = ["p","q","","r","","","s","",""]; // if it is like this 
function checkForSameConsecutives(arr) {
  for(let i=0; i < arr.length - 3; i+=1){
    const ArrayToCheck = arr.slice(i, i+4)
    const ArrayToCheckSet = new Set(ArrayToCheck)
    if(ArrayToCheckSet.size === 1){
      return true
    }
  }
  return false
};

console.log(checkForSameConsecutives(Arr1))
console.log(checkForSameConsecutives(Arr2))
console.log(checkForSameConsecutives(Arr3))

Это не наиболее оптимизировано. Но может дать вам некоторое направление. Здесь код выполняет итерацию по каждому индексу и проверяет, совпадают ли следующие три элемента.

0 голосов
/ 26 апреля 2020

arr1 = ["a", "", "b", "c", "", "", "", "", "d"]; // if array is like this it should return - True
arr2 = ["", "", "", "", "", "a", "b", "c", "d"]; // if it is like this it should return - True
arr3 = ["p", "q", "", "r", "", "", "s", "", ""];

function hasFourOrMoreConsecutiveElements(arr) {
  let hasFourOrMoreConsecutiveElements = false;
  arr
    .join("-") // Replace "" with '-' and convert into string
    .split(/[a-zA-Z]/) // split on alphabetical characters into separate arrays -> will look like ["---", "--", "----", ...]
    .forEach((array) => { // iterate over arrays
      if (array.length >= 4) { // check if any subarray has 4 or more items
        hasFourOrMoreConsecutiveElements= true;
        return;
      }
    });
  return hasFourOrMoreConsecutiveElements;
}

console.log(
  hasFourOrMoreConsecutiveElements(arr1),
  hasFourOrMoreConsecutiveElements(arr2),
  hasFourOrMoreConsecutiveElements(arr3)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...