这个章节将讲诉对数组的排序,从小到大规律排序,加深我们对数组的运算与理解
原题题目:
给定一个数组 arr
和一个函数 fn
,返回一个排序后的数组 sortedArr
。你可以假设 fn
只返回数字,并且这些数字决定了 sortedArr
的排序顺序。sortedArr
必须按照 fn
的输出值 升序 排序。
你可以假设对于给定的数组,fn
不会返回重复的数字。
默认代码模板:
/**
* @param {Array} arr
* @param {Function} fn
* @return {Array}
*/
var sortBy = function(arr, fn) {
};
输出结果事列:
示例 1:
输入:arr = [5, 4, 1, 2, 3], fn = (x) => x 输出:[1, 2, 3, 4, 5] 解释:fn 只是返回传入的数字,因此数组按升序排序。
示例 2:
输入:arr = [{"x": 1}, {"x": 0}, {"x": -1}], fn = (d) => d.x 输出:[{"x": -1}, {"x": 0}, {"x": 1}] 解释:fn 返回 "x" 键的值,因此数组根据该值排序。
示例 3:
输入:arr = [[3, 4], [5, 2], [10, 1]], fn = (x) => x[1] 输出:[[10, 1], [5, 2], [3, 4]] 解释:数组按照索引为 1 处的数字升序排序。
根据以上要求我们可以写出:
解答:
/**
* @param {Array} arr
* @param {Function} fn
* @return {Array}
*/
var sortBy = function(arr, fn) {
return arr.sort((a,b) => fn(a) - fn(b))
};
我们可以利用 sortBy
函数内部使用了数组的 sort
方法来进行排序。sort
方法接受一个比较函数作为参数,用于确定元素的排序顺序。在这个代码中,比较函数被定义为 (a, b) => fn(a) - fn(b)
。
该比较函数通过调用给定的函数 fn
来获取每个元素的排序依据,然后使用减法运算符比较这些依据的值。通过返回正数、负数或零来确定元素的顺序。如果 fn(a) - fn(b)
的结果是负数,说明 a
应该在 b
之前;如果结果是正数,说明 a
应该在 b
之后;如果结果是零,说明 a
和 b
的顺序相同。
这个方法利用了数组的 sort
方法和比较函数来实现自定义的排序规则。通过传递不同的函数 fn
,可以根据元素的不同属性或条件来对数组进行排序。
题库出自leetcode,解答仅供参考