Ordenar una matriz de objetos

Ordenar una matriz de objetos

Ahora hay un objeto que es Departamento. Tiene tres atributos: ciudad indica la ciudad donde se encuentra el departamento. name indica el nombre del departamento. PersonNum. Indica el número de personas en el departamento.

Ahora quiero devolver los 5 mejores departamentos de cada ciudad. Si el número de personas entre los dos departamentos es el mismo. Luego ordene en orden ascendente según el orden del diccionario de ciudad+""+nombre.

Ideas para resolver problemas:

  1. Cree un diccionario con nombres de ciudades como claves y una matriz de objetos como valores.
  2. Para cada ciudad, ordene de mayor a menor según el número de departamentos y luego ordene según el orden lexicográfico de los nombres de los departamentos de menor a mayor. Tome los primeros cinco departamentos y agréguelos a la lista resultante.
  3. Devuelve una lista de resultados.
function findTopFiveDepartments(departments) {
    
    
    // 1. 创建字典
    const cityDepartments = {
    
    };
    for (const d of departments) {
    
    
      if (!(d.city in cityDepartments)) {
    
    
        cityDepartments[d.city] = [];
      }
      cityDepartments[d.city].push(d);
    }
  
    // 2. 计算 top five 部门
    const result = [];
    for (const [city, depts] of Object.entries(cityDepartments)) {
    
    
      const sortedDepts = depts.sort((a, b) => {
    
    
        if (a.PersonNum !== b.PersonNum) {
    
    
          return b.PersonNum - a.PersonNum;
        } else {
    
    
          return a.toString().localeCompare(b.toString());
        }
      }).slice(0, 5);
      // 如果原数组中的元素不足五个,则返回所有元素
      for (const dept of sortedDepts) {
    
    
        result.push(dept);
      }
    }
  
    // 3. 返回结果
    return result;
  }
  
  class Department {
    
    
    constructor(city, name, PersonNum) {
    
    
      this.city = city;
      this.name = name;
      this.PersonNum = PersonNum;
    }
  
    toString() {
    
    
      return `${
      
      this.city} ${
      
      this.name}`;
    }
  }
  

let departments = [
    new Department("New York", "Sales", 50),
    new Department("New York", "Marketing", 30),
    new Department("New York", "Engineering", 80),
    new Department("New York", "Customer Service", 20),
    new Department("New York", "Research", 40),
    new Department("New York", "Research", 50),
    new Department("Los Angeles", "Sales", 60),
    new Department("Los Angeles", "Marketing", 40),
    new Department("Los Angeles", "Engineering", 100),
    new Department("Los Angeles", "Customer Service", 30),
    new Department("Los Angeles", "Research", 50),
    new Department("Los ", "Resear", 50)
];

let topFiveDepartments = findTopFiveDepartments(departments);
console.log(topFiveDepartments);

Supongo que te gusta

Origin blog.csdn.net/qq_43720551/article/details/131231827
Recomendado
Clasificación