数一数国家的数目。(此任务涉及JavaScript中的多维数组和对象。)

数一数国家的数目。(此任务涉及JavaScript中的多维数组和对象。),javascript,arrays,object,Javascript,Arrays,Object,城市及其所在国家的结构如下所示: let data = [ { country: 'Serbia', city: 'Belgrad', }, { country: 'Ukraine', city: 'Kiev', }, { country: 'Russia', c

城市及其所在国家的结构如下所示:

let data = [
        {
            country: 'Serbia',
            city:    'Belgrad',
        },
        {
            country: 'Ukraine',
            city:    'Kiev',
        },
        {
            country: 'Russia',
            city:    'Moscow',
        },
        {
            country: 'Russia',
            city:    'Sant-Peterborough',
        },
        {
            country: 'Ukraine',
            city:    'Lvov',
        },
        {
            country: 'China',
            city:    'Beijing',
        },
        {
            country: 'Poland',
            city:    'Cracow',
        },
    ];
我的解决办法是:

let arr =[];
let sum= 0;
for ( elem of data){
  arr.push(elem.country)
}
let  uniqueCountries = [...new Set(arr)];
console.log(uniqueCountries.length)
它起作用了

我的问题:


例如,不使用新集合是否可能找到更好的解决方案?

集合有一个可以使用的大小属性。 您还可以通过在集合实例化中使用map来简化代码,如下所示:

让数据=[ {国家:塞尔维亚,城市:贝尔格拉德}, {国家:乌克兰,城市:基辅}, {国家:俄罗斯,城市:莫斯科}, {国家:俄罗斯,城市:圣彼得堡}, {国家:乌克兰,城市:利沃夫}, {国家:中国,城市:北京}, {国家:波兰,城市:克拉科夫} ] const set=new Setdata.mapo=>o.country
console.logset.sizeSet将是一种更干净的方法。您可以使用map而不是for循环来清理代码。在设置之前,您将使用一个对象并在列表上循环并获取国家/地区

让数据=[ {国家:'塞尔维亚',城市:'贝尔格拉德',}, {国家:'乌克兰',城市:'基辅',}, {国家:'俄罗斯',城市:'莫斯科',}, {国家:'俄罗斯',城市:'圣彼得堡',}, {国家:'乌克兰',城市:'利沃夫',}, {国家:'中国',城市:'北京',}, {国家:'波兰',城市:'克拉科夫',}, ]; var countries=Object.keysdata.reduceo,{country}=>o[country]=true&&o,{}
console.logcountries.length您可以使用reduce方法计算国家:

让数据=[ { 国家:'塞尔维亚',城市:'贝尔格勒', }, { 国家:'乌克兰',城市:'基辅', }, { 国家:'俄罗斯',城市:'莫斯科', }, { 国家:'俄罗斯',城市:'圣彼得堡', }, { 国家:'乌克兰',城市:'利沃夫', }, { 国家:'中国',城市:'北京', }, { 国家:'波兰',城市:'克拉科夫', }, ]; const result=data.reducea,{country,city}=>{ a[国家]=a[国家]|{计数:0}; a[国家]。计数+=1; 返回a; }, {}
console.logresult;只需要做这个城市已经在数组中了吗?-检查你自己最简单的方法是另一个带有if的for循环。你能定义更好的解决方案吗?Andreas,你能澄清代码中应该包含什么吗?