我正在尝试使用一个函数从对象数组中提取一个对象,该函数根据我预设的一些规则随机化所选对象(每个对象都有一个从 0 到 1 的上限和下限,控制其“机会”)正在被选中。
我想多次运行此函数并将每次单独调用的结果存储在一个新数组中。
下面是我写的代码。它生成规定数量的不同对象,但是我尝试构建这些对象数组的部分只是将多个相同的调用插入数组,因此我最终得到一个充满我随机拉取的相同对象的数组。
const animals = [
{
upperProb: 1,
lowerProb: 0.8,
Animal: 'Zebra'
},
{
upperProb: 0.8,
lowerProb: 0.25,
Animal: 'Cat'
},
{
upperProb: 0.25,
lowerProb: 0,
Animal: 'Narwhal'
},
];
const generatedAnimal = {};
let animalChoice = () => {
const numGen = Math.random();
console.log(numGen);
const selectedAnimal = animals.find(animal =>
animal.upperProb > numGen
&& animal.lowerProb <= numGen
);
generatedAnimal.Animal = selectedAnimal.Animal;
return generatedAnimal;
};
console.log(generatedAnimal);
const generateDist = () => {
let animalDist = [];
let i = 0;
do {
animalChoice();
animalDist.push(generatedAnimal);
console.log(generatedAnimal);
i++
} while (i < 10)
console.log(animalDist);
}
generateDist();
最佳答案
您的代码几乎是正确的。您多次将相同的引用推送到数组,从而获得 ref 2 输出。当 generatedAnimal 应该是变量时,您也将它设置为常量。很容易修复,请参阅下面的代码:
const animals = [
{
upperProb: 1,
lowerProb: 0.8,
Animal: 'Zebra'
},
{
upperProb: 0.8,
lowerProb: 0.25,
Animal: 'Cat'
},
{
upperProb: 0.25,
lowerProb: 0,
Animal: 'Narwhal'
},
];
/*********change this**********************
const generatedAnimal = {};
**************to***************************/
var generatedAnimal = {};
let animalChoice = () => {
const numGen = Math.random();
//console.log(numGen);
const selectedAnimal = animals.find(animal =>
animal.upperProb > numGen
&& animal.lowerProb <= numGen
);
generatedAnimal.Animal = selectedAnimal.Animal;
return generatedAnimal;
};
//console.log(generatedAnimal);
const generateDist = () => {
let animalDist = [];
let i = 0;
do {
/**********add this************/
generatedAnimal={};
/******************************/
animalChoice();
animalDist.push(generatedAnimal);
//console.log(generatedAnimal);
i++
} while (i < 10)
console.log(animalDist);
}
generateDist();
关于javascript - 如何从数组中多次随机选择一个对象并将每个对象存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149675/