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

По сути, у меня есть два массива связанных элементов массива, где один элемент выбирается случайным образом.

Я хочу напечатать связанный элемент второго массива. Допустим, у вас есть массив имен заданий, и он выглядит так:

const jobNames = ["Builder", "Doctor", "Vet"];

Затем выбирается случайное имя работы, подобное этому:

var randomJobName = jobNames[ Math.floor(Math.random() * jobNames.length) ];

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

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

var index = Math.floor(Math.random()*JOB_ARRAY.length), а затем используйте его для обоих массивов.
VLAZ 05.05.2022 20:43

Это выбирает один случайный индекс. Это не случайно на массив, если вы делаете arr1[index] и arr2[index]. Конечно, лучшее решение состоит в том, чтобы нет имел два совпадающих массива, если вы хотите, чтобы данные были вместе.

VLAZ 05.05.2022 20:53

Итак, как бы выглядел полный код, если бы я хотел напечатать и задание, и описание задания в разных строках?

Joshua Nowell 05.05.2022 21:02
Поведение ключевого слова "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
3
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если имена вакансий и описания вакансий связаны вместе, мне интересно, почему они вообще находятся в двух разных массивах. Это идеальный вариант использования объектов. я бы структурировал так

const jobs = [
  {name: "Builder", description: "Builds Stuff"},
  {name: "Doctor", description: "Heals Stuff"},
  {name: "Vet", description: "Heals Stuff but for animals."}
]

Использование деструктуризация объекта для доступа к значениям:

const {name, description} = jobs[Math.floor(Math.random() * jobNames.length)]
alert(`Found job: ${name} who ${description}`)
Ответ принят как подходящий

Есть в основном 3 разных подхода.

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

const jobNames = ['Builder', 'Doctor', 'Vet'];
const jobDescriptions = [
  'creates/builds things/stuff.',
  'tries fixing human health issues.',
  'does fix animal health issues.',
];
const randomIdx = Math.floor(Math.random() * jobNames.length);

const jobName = jobNames[randomIdx];
const jobDescription = jobDescriptions[randomIdx];

console.info({ jobName, jobDescription });
.as-console-wrapper { min-height: 100%!important; top: 0; }

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

const jobNames = ['Builder', 'Doctor', 'Vet'];
const jobDescriptions = [
  'creates/builds things/stuff.',
  'tries fixing human health issues.',
  'does fix animal health issues.',
];
// OP has no control about how `jobName` is/was/gets chosen.
const jobName = jobNames[ Math.floor(Math.random() * jobNames.length) ];

const index = jobNames.indexOf(jobName);
const jobDescription = jobDescriptions[index];

console.info({ jobName, jobDescription });
.as-console-wrapper { min-height: 100%!important; top: 0; }

В случае, если такая задача должна выполняться часто/повторно и в случае, если OP может изменить код, поскольку OP доволен, подход состоял в том, чтобы объединить оба массива в массив агрегированных элементов задания (имя и описание) и сделать случайный выбор один раз из этой новой структуры массива...

const jobNames = ['Builder', 'Doctor', 'Vet'];
const jobDescriptions = [
  'creates/builds things/stuff.',
  'tries fixing human health issues.',
  'does fix animal health issues.',
];
const jobList = jobNames
  .map(function (name, idx) {

    const description = this[idx];
    return {
      name,
      description,
    };
                        // `jobDescriptions` applied as
  }, jobDescriptions);  // `map`'s 2nd `thisArg` argument.

function getRandomArrayIndex(arr) {
  return Math.floor(Math.random() * arr.length);
}

const {
  name,
  description,
} = jobList[ getRandomArrayIndex(jobList) ];

console.info({ name, description });
console.info({ jobList });
.as-console-wrapper { min-height: 100%!important; top: 0; }

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