如何通过使用reduce函数有效地评估javascript数组中的元素

Xri*_*ris 1 javascript

我有一个名为people的数组,它是一个对象数组(人的名字和他/她的城市的名字),我想创建一个函数来计算该数组中不同城市的总数。我使用了一个用于for循环的函数,但通过在JavaScript中使用reduce函数,这似乎是一种更好的方法。这是片段

const people = [
  { name: "Jessica", city: "New York"},
  { name: "Steve",   city: "Los Angels"},
  { name: "Peter",   city: "Boston"},
  { name: "Elaine",  city: "Montreal"},
  { name: "Chris",  city: "Montreal"},
  { name: "Mike",  city: "Boston"},
  { name: "George",  city: "Vancouver"},
];
let nbre_distinct_cities = 0;

countDistinctCity(people);
console.log('Total number of distinct cities: ',nbre_distinct_cities); 

function countDistinctCity(people)
{
  for(let i = 0; i < people.length; i++)
  {
      if(i === people.length - 1)
      {
          break;
      }
      else if(people[i].city !== people[i + 1].city)
      {
        nbre_distinct_cities++
      }
  }

}
Run Code Online (Sandbox Code Playgroud)

如果有人建议使用reduce()函数的高效功能,我将不胜感激

sli*_*der 6

您可以使用a Set来存储数组中的所有城市,并且由于集合中只有唯一的条目,因此集合的最终大小将为您提供不同城市的数量:

const people = [
  { name: "Jessica", city: "New York"},
  { name: "Steve",   city: "Los Angels"},
  { name: "Peter",   city: "Boston"},
  { name: "Elaine",  city: "Montreal"},
  { name: "Chris",  city: "Montreal"},
  { name: "Mike",  city: "Boston"},
  { name: "George",  city: "Vancouver"},
];

let nbre_distinct_cities = new Set(people.map(({city}) => city)).size;
console.log('Total number of distinct cities: ', nbre_distinct_cities); 
Run Code Online (Sandbox Code Playgroud)