Javascript 创建主数组修改属性的新数组

Javascript 创建主数组修改属性的新数组,javascript,Javascript,这对我来说是一个挑战,我如何才能正确地编写代码?我真的需要一些帮助来处理它 它实际上是关于加权随机化。我试图用我糟糕的英语一步一步地解释这一点:)对不起,如果这里有任何不必要的信息,如果有人能让这更简单,我会很高兴 比如说,我们想根据期望的权重随机选择一个城市名称 在这里,我们有一个对象数组,其中包含这些城市名称、我们的示例所需权重以及每个城市与西部的距离 var list = [ { name: "New York", distance: 4, weight: 1 }

这对我来说是一个挑战,我如何才能正确地编写代码?我真的需要一些帮助来处理它

它实际上是关于加权随机化。我试图用我糟糕的英语一步一步地解释这一点:)对不起,如果这里有任何不必要的信息,如果有人能让这更简单,我会很高兴

比如说,我们想根据期望的权重随机选择一个城市名称

在这里,我们有一个对象数组,其中包含这些城市名称、我们的示例所需权重以及每个城市与西部的距离

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 },
];   
所以纽约远,洛杉矶近。好的,现在我可以使用这个函数根据城市的重量来选择一个城市(不需要向您展示背后的代码,但是如果您想查看它,请随意询问)

该代码的结果是其中一个城市,例如纽约

我的问题是:在选择第一个城市后,我需要一个新的修改权重数组,以便:

A) 将已拾取的城市权重设为0(这样它就不能重复了注意:这不是问题所在)

B) 根据剩余城市与上次拾取城市的距离,使用以下逻辑修改剩余城市的权重:城市距离上次拾取城市越远,权重越大。(换言之,我想根据上一个已经被挑选的城市的情况来挑选城市…)

例如:如果纽约是第一个被选中的城市,那么纽约权重应该是0,因为与洛杉矶的距离是3(纽约。距离:4 vs洛杉矶。距离:1)加上洛杉矶。权重a 3,使其为4


欢迎提出任何想法或解决方案……

以下是反映我意见的答案:


你的逻辑无法按你的意愿运作。以亚特兰大为例: 亚特兰大权重变为:0,纽约权重变为:
(3-4)+1=0
-根据你的逻辑,你有两个权重为零的。我建议不要添加当前的权重。这将提供一个带符号的值作为 不能重复的重量

此答案将确保
权重
属性的值唯一。你可以想象负值从零加权位置向西移动,而正值从零加权位置向东移动

var列表=[
{名称:“纽约”,距离:4,重量:1},
{姓名:“亚特兰大”,距离:3,重量:1},
{名称:“达拉斯”,距离:2,重量:1},
{名称:“洛杉矶”,距离:1,重量:1},
];
//给定的城市是亚特兰大
让我们一起去亚特兰大;
让baseDistance=list.find(l=>l.name==randomCity).distance;
让newList=list.map(c=>{
console.log();
设newWeight=Math.abs(baseDistance-c.distance);
返回{
姓名:c.name,
距离:c.距离,
重量:新重量
};
});

console.log(newList)您的逻辑无法按您的意愿工作。以亚特兰大为随机城市:亚特兰大权重变为:0,纽约权重变为:
(3-4)+1=0
——根据逻辑,你有两个权重为零的城市。我建议不要添加当前的权重。这将提供一个符号值作为权重,不能重复。感谢您的回答。。。加一。。。但有一件事需要提及:我只关心城市距离差异的绝对值。如果给定的随机城市是亚特兰大,那么纽约和达拉斯应该被赋予相等的权重,因为它们与亚特兰大的绝对值距离差是1。那么,这样一来,它就不能从你的问题中重复了,这使我对你的问题的理解变得混乱。这些价值观能重复吗?对不起,我的英语不好引起了误解。。。已拾取的城市将不会再次拾取,因为其权重为0。拾取亚特兰大后,唯一的选择是提醒城市…您可以使用find而不是filter,find将返回对象,而不是从零数组中提取来获取baseDistance@DILEEPTHOMAS-当然,可能是更好的解决方案。
var random_item = getRandomItem(name, weight);
console.log(random_item);