从数组中选择随机文本



我已经做到了,但是是否可以只显示一次并从每个事情的列表中删除它?

例如,它首先显示"first"当它被发送时,我想发送其他3条消息,当它为空时,它表示列表中没有任何[答案]。

const messages = ["first", "two", "three", "four"]
const randomMessage = messages[Math.floor(Math.random() * messages.length) - 1];

我建议使用洗牌算法来洗牌您的消息,然后您可以使用Array.shift()逐个挑选消息。

这里的shuffle()函数是一个基本的Fisher-Yates/Knuth洗牌。

function shuffle(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
const messages = ["first", "two", "three", "four"];
const randomizedMessages = shuffle(messages);
let i = 0;
// Take messages one by one using Array.pop()
while(randomizedMessages.length) {
console.log(`Message #${++i}:`, randomizedMessages.shift());
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者使用lodash shuffle:

const messages = ["first", "two", "three", "four"];
const randomizedMessages = _.shuffle(messages);
let i = 0;
while(randomizedMessages.length) {
console.log(`Message #${++i}:`, randomizedMessages.shift());
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" referrerpolicy="no-referrer"></script>

使用后,您可以找到所选元素的索引,然后将其删除。

const messages = ["first", "two", "three", "four"]
const index = Math.floor(Math.random() * messages.length)
const randomMessage = messages[index]
messages.splice(index, 1)
//rest of what you are going to do with 'randomMessage'

检查是否为空,只要检查messages.lengthrandomMessage即可。如果数组为空(messages.length0,randomMessageundefined),则两者都为false

if (!messages.length) console.log("The array is empty!")

相关内容

  • 没有找到相关文章

最新更新