Поиск значений пары из массива, получение большей длины пар

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

  1. 1+2 = 3
  2. 1+2 = 3
  3. 3+6 = 9
  4. 2+1 = 3
  5. 1+2 = 3

потому что я пробую вот так:

const ar = [1, 3, 2, 6, 1, 2], n = 6, k = 3;
    const list = [];
    
    const filter = (num) => {
      const v = ar.filter(v => {
        if ((num+v) %3 === 0){
          list.push([num, v]);
        }
      });
    
    }
    
    for(let i = 0; i < n; i++) {
      const val = ar[i]
      filter(val)
    }
    
   console.info(list); 

Но дает больше пар[12], чем требуется. Как с этим справиться? Я понял, что потерял здесь некоторую логику.

Привет! Не могли бы вы обновить свой пост? Не совсем уверен, что вы хотите, чтобы здесь произошло.

dork 10.06.2024 05:18

Затем вы зацикливаете массив, зацикливаете его снова, чтобы получить результат. Значит, результаты верны. Было бы очень полезно объяснить, что вы пытались сделать, потому что это правильный результат вашей логики. Фильтр не выглядит подходящим методом для ваших целей, но кто знает, что это такое. в 36 итерациях 12 совпадений.

danielRICADO 10.06.2024 05:51

Я смотрю, мой результат должен быть [[1+2] [1+2] [3+6] [2+1 ] [1+2]]

user2024080 10.06.2024 06:16

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

Weijun Zhou 10.06.2024 06:39

Согласно коду, он полностью работает нормально, но, глядя на ваше утверждение, кажется, что вы хотите проверить это кратное 3 от выбранного индекса до индекса, большего, чем он, а не индексов, меньших или равных ему.

Yash Maheshwari 10.06.2024 06:57

@ЯшМахешвари, да. для меня я получаю больше массивов, чем мне нужно.

user2024080 10.06.2024 07:05
Поведение ключевого слова "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
6
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Просто передайте другое значение в качестве индекса функции фильтра, увеличив его на 1, чтобы она проверяла кратные следующего числа и не включала числа ниже текущего выбранного.

const ar = [1, 3, 2, 6, 1, 2], n = 6, k = 3;
const list = [];
    
const filter = (num, index) => {
  for(let i = index; i < n; i++) {
    if ((num+ar[i]) %3 === 0){
      list.push([num, ar[i]]);
    }
  }
}
    
for(let i = 0; i < n; i++) {
  const val = ar[i]
  filter(val, i+1)
}
    
console.info(list); 

Я пробовал использовать этот подход. у меня это работает лучше.

const ar = [1, 3, 2, 6, 1, 2]
const copy = [...ar];
const result = []
ar.forEach(v => {
  copy.shift()
  copy.forEach(n => {
    if ((v+n) % 3 === 0) {
      result.push([v,n])
    }
  });
});

console.info(result)

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