javascript - 用于生成 Object 的随机实例的 JavaScript 函数
问题描述
我正在尝试创建一个由九个随机单词组成的数组。每个单词都应该有一个颜色键值。九个字中,三个字应该是“红”,三个字应该是“蓝”,一个字应该是“黑”。颜色需要随机分配给单词(每次生成数组时,每种颜色的位置都应该随机改变)。
到目前为止,我的代码生成了一个单词数组,每个单词随机分配了一种颜色,但是没有限制——例如,我可能会得到 2 个黑色、3 个红色和 4 个蓝色。然后下一次0黑4红5蓝。我每次需要产生 4 个红色 4 个蓝色和 1 个黑色(随机定位)。
我认为计数器会很有用,但目前没有使用。
任何帮助都会很棒 - 我是编码新手,所以很重要!
这是我的代码:
//Globals
const wordList = [..... ***remov
ed giant list of words from post***
];
const colorList = ['red', 'blue', 'black']
let randomWordNum = Math.floor(Math.random()*(wordList.length))
let randomColorNum = Math.floor(Math.random()*(colorList.length))
let coloredWords = [];
let redCounter = 0;
let blueCounter = 0;
let blackCounter = 0;
//Square function
//assigns color and word value to object key
//pushes object to new array 'words'
const createSquare = () => {
let randomWordNum = Math.floor(Math.random()*(wordList.length))
let randomColor = colorList[Math.floor(Math.random()*(colorList.length))]
if (randomColor === 'red') {
redCounter++
} else if (randomColor === 'blue') {
blueCounter++
} else if (randomColor === 'black') {
blackCounter++
}
var square = {
color: randomColor,
word: wordList[randomWordNum],
}
coloredWords.push(square)
console.log(square)
}
//Loops through above function until the array is x values
const wordArr = () => {
while (coloredWords.length < 9 ){
createSquare()
}
}
wordArr()
console.log(coloredWords)
解决方案
您可以首先创建一个所有颜色的数组 3 次(例如['red', 'blue', 'black', 'red', 'blue', 'black', 'red', 'blue', 'black']
),然后对其进行随机播放,然后在每次迭代时,从数组中选择并删除一个元素:
//Globals
const wordList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
const colorList = ['red', 'blue', 'black']
const coloredWords = [];
const COUNT_FOR_ONE_COLOR = 3;
const randomColorsArr = Array.from(
{ length: COUNT_FOR_ONE_COLOR * colorList.length },
(_, i) => colorList[i % colorList.length]
);
// Shuffle:
// https://stackoverflow.com/a/12646864
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
shuffleArray(randomColorsArr);
const createSquare = () => {
const randomWordNum = Math.floor(Math.random() * (wordList.length))
const randomColor = randomColorsArr.pop();
const square = {
color: randomColor,
word: wordList[randomWordNum],
}
coloredWords.push(square)
};
for (let i = 0; i < 9; i++) {
createSquare();
}
console.log(coloredWords)
推荐阅读
- javascript - 创建反应应用 + 反应惰性 + 绝对导入
- checkbox - 在 Xmarin.Forms 的 ViewCell 中切换 CheckBox
- javascript - 如何处理浏览器中的三星 S-Pen 按钮事件(Javascript)?
- javascript - EJS 文件显示日期不正确(日期落后一号)
- typescript - Unexpected union distribution
- c++ - 如何在我的函数中修复我的 fstream 文件输入以将正确的信息存储在我的结构数组中?
- windows - 我无法在 Windows 10 上使用匈牙利语布局键入“<”
- python - python多处理模块更新被调用进程内的类属性,但未全局更新
- java - TextNG 不接受 Object[][] 数据作为数据提供者
- asp.net-mvc - Blazor HttpClient 3.2.0 获取调用抛出异常,因为响应标头内容类型与 GetFromJsonAsync 不兼容