пусть ввод arr=[9,4,4,8,90,4,9,4,4,4,4,4,4,4,4,4,7,9,2,4,4,4,4 ,4,8,4,4,4,4];
пусть вывод arr=[1,7,9,11,13,15,19,21,25,27];
Выше приведен входной массив чисел, который содержит в основном 4, если есть пара из 4, что означает (входные элементы имеют 2 числа 4 последовательно), его позиция массива будет отображаться в выходном массиве. Я пробовал свой код ниже, но я все еще не уверен, как это решить :). Могу ли я узнать, как это решить?
console.clear();
let arr=[8,4,4,4,4,4,4,4,4,4,7,9,2,4,4,4,4,4,8,4,4,4,4];
console.info("his")
for (let i=0;i<arr.length;i++){
if (arr[i]!==arr[i+1] &&arr[i]!==4 ){
console.info(i)
}
if (arr[i]!==arr[i+1] &&arr[i+1]!==4 ){
console.info(i+1)
}
}


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете перейти к следующему элементу, и если последний индекс не находится в массиве результатов, добавьте фактический индекс к результату.
const
input = [9, 4, 4, 8, 90, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 9, 2, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4],
result = input.reduce((r, v, i, a) => {
if (v === a[i + 1] && r[r.length - 1] !== i - 1) r.push(i);
return r;
}, []);
console.info(...result);Подход для n элементов с замыканием по счетной переменной c.
const
getIndices = (array, n) => input.reduce((c => (r, v, i, a) => {
if (!c) {
if (v === a[i + 1]) c = 1;
return r;
}
c = v === a[i - 1] ? c + 1 : 0;
if (c === n) {
r.push(i - n + 1);
c = 0;
}
return r;
})(0), []),
input = [9, 4, 4, 8, 90, 4, 9, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 9, 2, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4];
console.info(...getIndices(input, 2));
console.info(...getIndices(input, 3));
console.info(...getIndices(input, 4));
console.info(...getIndices(input, 5));это действительно немного сложно, потому что перед добавлением индекса он должен заранее просмотреть следующие значения и проверить равенство.
Да ха-ха. Ну, мне нужна эта логика, чтобы исправить ошибку в моем приложении, ха-ха :)
Привет, спасибо, что нашли время решить это, серьезно, это слишком сложно для меня, как для новичка :)
Это возможное решение:
console.clear();
let arr=[8,4,4,4,4,4,4,4,4,4,7,9,2,4,4,4,4,4,8,4,4,4,4];
let pair = false;
for (let i=0;i<arr.length;i++){
if (pair == false) {
if (arr[i]==arr[i+1]){
console.info(i)
pair = true; // show that we have found a pair
} // thus we skip a 'for' loop
}
else {
pair = false; // reset the pair variable
}
}
вывод: [1, 3, 5, 7, 13, 15, 19, 21]
Хочешь эту пару: пусть arr=[8,4,4,4,4,4,4,4,4,4,7,9,2,4,4,4,4,4,8,4,4,4,4] ;
тоже считать?
Да, конечно, Пара :)
Моя ошибка в вопросе извините :)
Вы хотите, чтобы три последовательных числа считались двумя парами или только одной парой? В первом случае, если у вас есть массив, такой как ваш выборочный массив, пары могут подсчитываться два раза, а не один. Второй случай я уже решил. Например ``` [2,4,4,4,4,4,4,5] ``` будет иметь 5 пар вместо 3!
Привет, Марко, спасибо за ответ, если [2,4,4,4,4,4,4,5] означает, что вывод должен быть [1,4], первая позиция из 3 последовательных цифр 4 :)
Это похоже на то, что если вопрос будет изменен на 3 последовательных номера 4 вместо 2 последовательных номеров 4 (пара) в моем входном массиве :)? Например, если я создаю функцию ввода для числа N, которое означает (N последовательный номер 4, N = 2, означает 2 из числа 4 (пара) и 3 означает 3 из числа 4
Большое спасибо, мисс. Что, если вопрос изменится на 3 последовательных номера 4 вместо 2 последовательных номеров 4 (пара) в моем входном массиве :)? Например, если я создаю функцию ввода для числа N, которое означает (N последовательный номер 4, N = 2, означает 2 из числа 4 (пара) и 3 означает 3 из числа 4