面试题答案
一键面试实现思路
- 定义一个排序函数,接收数组和属性名作为参数。
- 在排序函数内部,使用
Array.prototype.sort
方法对数组进行排序。 - 在
sort
方法的回调函数中,根据传入的属性名获取对象的属性值。 - 如果属性值是数组,比较数组的长度;如果是其他类型,直接比较属性值。
代码实现
function sortUsers(users, property) {
return users.sort((a, b) => {
const valueA = a[property];
const valueB = b[property];
if (Array.isArray(valueA) && Array.isArray(valueB)) {
return valueA.length - valueB.length;
} else if (Array.isArray(valueA)) {
return -1;
} else if (Array.isArray(valueB)) {
return 1;
} else {
if (valueA < valueB) return -1;
if (valueA > valueB) return 1;
return 0;
}
});
}
边界情况处理
- 属性不存在:如果对象中不存在传入的属性名,在
sort
回调函数中比较时,valueA
或valueB
会是undefined
,按常规比较规则处理,即undefined
小于任何其他值(除了null
,它们相等)。 - 混合类型:当部分对象的属性值为数组,部分为其他类型时,上述代码中将数组类型排在其他类型之前(通过
if (Array.isArray(valueA)) return -1;
和if (Array.isArray(valueB)) return 1;
实现),可以根据实际需求调整此逻辑。