#javascript #arrays
#javascript #массивы
Вопрос:
Я хочу отобразить 10 кавычек случайным образом, но я не хочу дубликатов (они должны быть разными). Итак, я поместил кавычки в массив, а затем добавил этот массив в набор, зная, что набор удалит все дубликаты. Проблема в том, что добавление их в набор приведет к удалению дубликатов, и я не получу столько кавычек, сколько хотел, но у него не будет дубликатов.
const refreshQuotes = (count:number):any => {
let quotesSelectedFromPool = [];
let myArray = [];
let mySet = new Set();
for (let n:number=0; n<count; n ) {
let index:number = getRandom(0, quotesArchive.length - 1);
myArray.push(quotesArchive[index]);
quotesSelectedFromPool.push(quotesArchive[index]);
console.log(quotesSelectedFromPool[n].id);
mySet.add(quotesArchive[index]);
myArray = Array.from(mySet);
console.log(myArray);
}
let a = myArray.length;
if (a == count){
console.log("its equal");
if (mySet.size == count){
console.log(mySet.size, "this is my set size");
return quotesSelectedFromPool = Array.from(mySet);
}
} else if ( a !== count){
refreshQuotes(count);
}
return quotesSelectedFromPool = Array.from(mySet);
Чего мне здесь не хватает? Правильно ли я это делаю? Я знаю, что есть много способов сделать это, но я думал, что этот способ сработает, какие-либо предложения ..?
Ответ №1:
Что-то вроде этого должно работать
const quotesArchive = [
"this is a test 1",
"this is a test 2",
"this is a test 3",
"this is a test 4",
"this is a test 5",
"this is a test 6",
"this is a test 7",
"this is a test 8",
"this is a test 9",
"this is a test 10"
];
const getRandomQuotes = (count) => {
// array to hold random quotes
const retrievedQuotes = [];
// loop until the count is 0
while (count > 0) {
// get a random integer between 1 and 10
const idx = Math.floor(Math.random() * 10);
// get the quote from the archive
const quote = quotesArchive[idx];
// if the quote is not already in the retrieved list, add it
if (!retrievedQuotes.includes(quote)) {
retrievedQuotes.push(quote);
// decrement the count of quotes that is left to retrieve
count--;
}
}
return retrievedQuotes;
};
// pass in whatever count you want between 1 and 10
console.log(getRandomQuotes(2));
Комментарии:
1. Я не получаю дубликатов с вашим способом, но это не всегда дает мне желаемое количество кавычек, которые я просил каждый раз .. ?
2. поместите count— внутри оператора if
3. О да. Это верно. Я не проверял это тщательно. Хороший улов. Обновлено