面试算法题解题思路中的某个步骤,当时有点懵,没做出来。
需求:对一个数组进行排序,这个数组的元素是对象。举例:
// 根据年龄从小到大对数据进行排序
const person = [
{name:"jack", age:21},
{name:"rose", age:17},
{name:"mike", age:23},
{name:"jonny", age:9}
];
首先了解一下数组函数sort的用法,可以设计一个比较函数,作为参数传递给sort函数,以此来设置元素排序顺序,如下举例:
// 对下列数值数组进行升序排序
function compare(v1, v2) {
if (v1 < v2) return -1;
else if (v1 > v2) return 1;
else return 0;
}
const array = [1,7,8,2,3];
console.log(array.sort(compare)); // 输出: [ 1, 2, 3, 7, 8 ]
然后已知在JavaScript中,函数可以作为参数传递给另一个函数,也可以作为一个函数的返回值。
解题思路:定义一个函数,此函数接收一个属性名,根据此属性名创建一个比较函数作为返回值。该函数作为参数传递给sort函数。
代码实现:
// 根据每个人的年龄,升序排序数组person
const person = [
{name:"jack", age:21},
{name:"rose", age:17},
{name:"mike", age:23},
{name:"jonny", age:9}
];
function objectSort(age) {
// 比较函数通过age属性获得对象的年龄进行比较
// 比较函数作为函数返回值返回给sort
return function (obj1, obj2) {
if (obj1[age] < obj2[age]) return -1;
else if (obj[1] > obj2[age]) return 1;
else return 0;
}
}
person.sort(objectSort("age")); // 传递对象属性名称
console.log(person);
当然比较函数可以简化一下,写作:
function objectSort(age) {
// 比较函数通过age属性获得对象的年龄进行比较
// 比较函数作为函数返回值返回给sort
return function (obj1, obj2) {
return obj1[age] - obj2[age];
}
}