这对我来说是一个挑战,我该如何正确编码?我真的需要一些帮助来处理它...
它是关于加权的 - 实际上是随机化的。我尝试用我的英语不好的一步来解释这一一步::)抱歉,如果这里提供了任何不必要的信息,如果有人可以使此简单简单...
,我会很高兴假设我们想根据所需的重量随机选择一个城市名称。
在这里,我们有一系列包含这些城市名称的物体和我们所需的重量以及每个城市距离西方的距离。
var list = [
{ name: "New York", distance: 4, weight: 1 },
{ name: "Atlanta", distance: 3, weight: 1 },
{ name: "Dallas", distance: 2, weight: 1 },
{ name: "Los Angeles", distance: 1, weight: 1 },
];
所以纽约很遥远,洛杉矶就在附近。好的,现在我可以根据此功能根据其重量来选择城市(没有必要向您展示其背后的代码,但请随时要求它,如果您想看看它(。
var random_item = getRandomItem(name, weight);
console.log(random_item);
此代码的结果是这些城市之一,例如纽约。
我的问题是:拿起第一个城市后,我想要一个新的修改权重,以便:
a(给出已经拾取的城市重量为0(这样,它就无法再次重复注意:这不是问题(。
b(根据其距离最后捡起的城市的距离来修改其余城市的重量:就像城市远离上次捡起的城市一样,他们会获得更大的重量。(在另一个词中,我想根据已经捡起的最后一个城市来挑选城市...(
(例如:如果纽约是第一个捡到的城市,那么纽约的重量应为0,而距离洛杉矶的距离为3(纽约。los Angles。重量A 3,使其4。
任何想法或解决方案都将受到赞赏...
这是一个反映我评论的答案:
您的逻辑无法按照您的意愿起作用。以亚特兰大为随机城市: 亚特兰大的体重变为:0,纽约的体重变为:
(3 - 4) + 1 = 0
- 鉴于逻辑,您的权重为零。我建议不要添加当前的重量。这将提供一个签名的值 无法重复的重量。
此答案将确保weight
属性的唯一值。您可以想到负值向上移动,而正值则从零加权位置移动。
var list = [
{ name: "New York", distance: 4, weight: 1 },
{ name: "Atlanta", distance: 3, weight: 1 },
{ name: "Dallas", distance: 2, weight: 1 },
{ name: "Los Angeles", distance: 1, weight: 1 },
];
// Given random city is Atlanta
let randomCity = "Atlanta";
let baseDistance = list.find(l => l.name == randomCity).distance;
let newList = list.map(c => {
console.log();
let newWeight = Math.abs(baseDistance - c.distance);
return {
name: c.name,
distance: c.distance,
weight: newWeight
};
});
console.log(newList);
编辑:基于OP的评论,以及我对的明显误解,它无法再重复实际上是含义的(我认为唯一性是想法(,我将重量更改为绝对值。