我试图跟踪子字符串中使用了哪些值,然后选择一个尚未使用过的值。
这个想法是一个提示系统,不仅仅是重复相同的提示。
简单示例:
str = [
'value1',
'value2',
'value3'
];
usedStr = [
'0'
];
因此在该示例中,我需要获取'value2'或'value3'。
希望如此。任何其他方法也应被赞赏,我对编码还很陌生。谢谢。
编辑:
我需要代码考虑到usedStr的值可以是0和3。 Math.random无法正常工作...
使用的值也存储在localStorage中。
答案 0 :(得分:0)
while(1==1){
var item = str[Math.floor(Math.random()*str.length)];
if (!usedStr.includes(item)){
console.log(item);
usedStr.push(item)
break;
}else if (usedStr.length==str.length){
console.log("usedStr is full");
break;
}
}
答案 1 :(得分:0)
您可以使用类似的内容:
// read already used indexes from localStorage
var usedStr = localStorage.usedStr || [];
//create an array of all possible index values
var indexesToUse = [...Array(str.length).keys()];
if (usedStr.length < str.length) //if not all have been used, remove the used ones
indexesToUse = indexesToUse.filter(val=>!~usedStr.indexOf(val));
//pick a random value from the index array
var index = indexesToUse[0|Math.random()*indexesToUse.length];
console.log('Today\'s random hint is: ' + str[index]);
//save the used index in localStorage
usedStr.push(index);
localStorage.usedStr = usedStr;
答案 2 :(得分:-1)
这个想法:先将提示和开头打乱,然后pop
一个接一个。
var hints = []; //make it global
var usedHints = [];
function getHintsFromStorage() {
//your logic here
return ['value1', 'value2', 'value3'];
}
function saveHintsToStorage() {
//save hints and usedHints here
}
function resetHints() {
//receive hints somehow
hints = getHintsFromStorage()
.sort(function() {
return Math.random() < 0.5; //shuffle
});
}
function getHint() {
if (hints.length > 0) {
var hint = hints.pop();
document.getElementById('hint').innerHTML = hint; //use once and throw
usedHints.push(hint);
saveHintsToStorage();
} else {
document.getElementById('hint').innerHTML = 'no more hints';
}
}
resetHints();
<div id="hint"></div>
<button type="button" onclick="getHint()">Get Hint</button>
<button type="button" onclick="resetHints()">Reset Hints (for test purpose)</button>