Javascript 如何对对象进行排序';s值为可能的最低值
我们有以下示例输入:Javascript 如何对对象进行排序';s值为可能的最低值,javascript,object,Javascript,Object,我们有以下示例输入: solve2([ "Bulgaria > Sofia > 200", "Bulgaria > Sopot > 800", "France > Paris > 2000", "Albania > Tirana > 1000", "Bulgaria > Sofia > 500"
solve2([
"Bulgaria > Sofia > 200",
"Bulgaria > Sopot > 800",
"France > Paris > 2000",
"Albania > Tirana > 1000",
"Bulgaria > Sofia > 500"
])
我基本上是将它们添加到这样的对象中:
destination= {
bulgaria: {Sofia: 500, Sopot: 800},
france: {Paris: 2000}
//and the rest the same way
}
所以这个例子给了我们:乡村>城镇>成本,我想举个例子,如果有两个索菲亚,我想拿一个成本较低的,但是我给你的代码只是覆盖了它们
function solve2(input)
{
let destination = {};
input.forEach(set => {
let [country, town, cost] = set.split(' > ');
cost = Number(cost)
destination[country] = {
...destination[country],
[town]: cost
};
});
console.log(destination);
}
这是想要的结果:
destination: {
Bulgaria: { Sofia: 200, Sopot: 800 },
France: { Paris: 2000 },
Albania: { Tirana: 1000 }
}
这就是我得到的:
destination: {
Bulgaria: { Sofia: 500, Sopot: 800 },
France: { Paris: 2000 },
Albania: { Tirana: 1000 }
}
我得到了更大的Sofia成本,因为这是最后一个,它只是覆盖了它,我想要的是为Sofia获得尽可能低的成本。在你改变
目的地之前,在你的循环中添加这一行:
if (destination[country]?.[town] < cost) return;
if(目的地[国家]?[城镇]
它主要检查您的部分结果中是否已经存在该城镇的成本,如果是,是否低于您当前处理的成本。如果这是真的,那么忽略此成本,这样就不会用它更新结果
请注意,?。
是一个相当新的操作符。检查一下。简而言之,它在这里计算destination[country][town]
,除了当未定义destination[country]
时它不会引发异常,而是将未定义的值传播到属性链的末尾。请添加想要的结果。@NinaScholz补充道,这绝对有效,但是有没有可能因为它看起来很混乱而对我进行分解呢?我的答案中添加的内容是你想要的吗?我不知道[]?[]语法,它在js中是新的吗?嗯,是的,这就是我在回答中写的:“…一个相当新的操作符”。检查文档。