MST

星途 面试题库

面试题:JavaScript 复杂数组方法优化:多条件排序与分组

假设有一个对象数组,每个对象包含 'name'(字符串)、'age'(数字)和'score'(数字)属性,如[{name: 'Alice', age: 25, score: 85}, {name: 'Bob', age: 22, score: 78}]。请编写优化的 JavaScript 代码,先按年龄降序排序,如果年龄相同则按分数升序排序,然后根据年龄是否大于等于 25 进行分组,返回分组后的结果。阐述优化思路以及如何利用数组方法提高性能。
35.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
const data = [{name: 'Alice', age: 25, score: 85}, {name: 'Bob', age: 22, score: 78}];

// 优化思路:使用数组的原生排序和分组方法,避免不必要的循环和中间变量。
// 排序时利用数组的 sort 方法,按照题目要求的规则进行排序,此方法效率较高。
// 分组时利用数组的 reduce 方法,遍历一次数组完成分组,减少重复操作。

const sortedData = data.sort((a, b) => {
    if (a.age!== b.age) {
        return b.age - a.age;
    } else {
        return a.score - b.score;
    }
});

const groupedData = sortedData.reduce((acc, item) => {
    const key = item.age >= 25? '25 及以上' : '25 以下';
    if (!acc[key]) {
        acc[key] = [];
    }
    acc[key].push(item);
    return acc;
}, {});

console.log(groupedData);
  1. 排序优化思路
    • 使用 Array.prototype.sort 方法对数组进行排序。
    • 比较函数根据年龄降序和分数升序的规则编写。这样直接利用原生数组方法,效率相对较高,避免了手动实现复杂的排序算法。
  2. 分组优化思路
    • 使用 Array.prototype.reduce 方法对排序后的数组进行分组。
    • reduce 方法的回调函数中,根据年龄判断分组的键,然后将元素添加到对应的数组中。这种方式一次遍历数组就完成分组,减少了循环次数,提高了性能。