Найти положение парных чисел в массиве

пусть ввод 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)
}

}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете перейти к следующему элементу, и если последний индекс не находится в массиве результатов, добавьте фактический индекс к результату.

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));

Большое спасибо, мисс. Что, если вопрос изменится на 3 последовательных номера 4 вместо 2 последовательных номеров 4 (пара) в моем входном массиве :)? Например, если я создаю функцию ввода для числа N, которое означает (N последовательный номер 4, N = 2, означает 2 из числа 4 (пара) и 3 означает 3 из числа 4

Theodore John 11.02.2023 09:43

это действительно немного сложно, потому что перед добавлением индекса он должен заранее просмотреть следующие значения и проверить равенство.

Nina Scholz 11.02.2023 09:45

Да ха-ха. Ну, мне нужна эта логика, чтобы исправить ошибку в моем приложении, ха-ха :)

Theodore John 11.02.2023 09:46

Привет, спасибо, что нашли время решить это, серьезно, это слишком сложно для меня, как для новичка :)

Theodore John 11.02.2023 10:34

Это возможное решение:

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] ;

тоже считать?

Да, конечно, Пара :)

Theodore John 11.02.2023 09:46

Моя ошибка в вопросе извините :)

Theodore John 11.02.2023 09:47

Вы хотите, чтобы три последовательных числа считались двумя парами или только одной парой? В первом случае, если у вас есть массив, такой как ваш выборочный массив, пары могут подсчитываться два раза, а не один. Второй случай я уже решил. Например ``` [2,4,4,4,4,4,4,5] ``` будет иметь 5 пар вместо 3!

Marko Kolaksazov 11.02.2023 09:51

Привет, Марко, спасибо за ответ, если [2,4,4,4,4,4,4,5] означает, что вывод должен быть [1,4], первая позиция из 3 последовательных цифр 4 :)

Theodore John 11.02.2023 09:54

Это похоже на то, что если вопрос будет изменен на 3 последовательных номера 4 вместо 2 последовательных номеров 4 (пара) в моем входном массиве :)? Например, если я создаю функцию ввода для числа N, которое означает (N последовательный номер 4, N = 2, означает 2 из числа 4 (пара) и 3 означает 3 из числа 4

Theodore John 11.02.2023 10:04

Другие вопросы по теме