分组和排序方式


1.分组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array.prototype.groupBy = function (fn) {
// 定义一个对象保存最终结果值
let result = {};
// 遍历数组
this.forEach((item) => {
// 函数 fn(item) 的返回值作为 result 的属性
if (result.hasOwnProperty(fn(item))) {
// 如果对象中已经包含该属性,则将遍历到的数组值存入属性值中
// 由于属性值是一个数组,所以用 push 方法
result[fn(item)].push(item);
} else {
// 如果对象中没有包含该属性,则将遍历到的数组值构造成一个数组放入对应的属性值中
result[fn(item)] = [item];
}
});
return result;
};

/**
* [1,2,3].groupBy(String) // {"1":[1],"2":[2],"3":[3]}
*/

2.排序方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
* sort(compareFn)
* compareFn 可选
* 定义排序顺序的函数。返回值应该是一个数字,其正负性表示两个元素的相对顺序。该函数使用以下参数调用:
function compareFn(a, b) {
if (根据排序标准,a 小于 b) {
return -1;
}
if (根据排序标准,a 大于 b) {
return 1;
}
// a 一定等于 b
return 0;
}
*/
var sortBy = function (arr, fn) {
return arr.sort((a, b) => fn(a) - fn(b));
};