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中是新的吗?嗯,是的,这就是我在回答中写的:“…一个相当新的操作符”。检查文档。