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

#javascript #arrays #splice

#javascript #массивы #сращивание

Вопрос:

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

Проблема в том, что, когда я это делаю, выбранное слово 1 отображается в предложении в виде строки, как я и надеялся, но выбранное слово 2 вместо этого отображает номер индекса.

 array = ["word","another word", "yet another word"];

/* put a random word from the array in its own value and then 
remove it from the array so it can't be chosen in next step */

let chosenWord1 = array.splice(Math.random() * array.length, 1)[0];

/* pick another random word from the same, altered array */

let chosenWord2 = Math.floor(Math.random() * array.length);

/* a function that puts a sentence on the webpage concatenating the strings 
from chosenWord1 and chosenWord2 goes here. then... */

/* add back the previously removed word so this process can repeat again 
with the same items in the array as there was before anything was done to it */

array.splice(1,0,chosenWord1);
  

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

Ответ №1:

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

 const array = ["word", "another word", "yet another word"];
const randomNumber = (key) => Math.floor(Math.random() * key);
for (let i = 0; i < 10; i  ) {
  const { [randomNumber(array.length)]: wordOne, ...rest } = array;
  const { [randomNumber(array.length - 1)]: wordTwo } = Object.values(rest);

  console.log(`${wordOne} and ${wordTwo}`);
}