<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
class MyArray extends Array {
constructor() {
super();
}
sum() {
return this.reduce(((previousValue, currentValue) => previousValue + 1 * currentValue), 0)
}
sumByKeyName(keyName) {
return this.reduce(((previousValue, currentValue) => previousValue + 1 * currentValue[keyName]), 0)
}
avg() {
return this.sum() / this.length
}
avgByKeyName(keyName) {
return this.sumByKeyName(keyName) / this.length
}
toMap(keyName) {
let map = new Map();
for (const item of this) {
map.set(item[keyName], item)
}
return map
}
groupByKeyName(keyName) {
let map = new Map();
for (const item of this) {
if (map.has(item[keyName])) {
map.get(item[keyName]).push(item)
} else {
map.set(item[keyName], MyArray.of(item))
}
}
return map;
}
groupByKeyNameAndCounting(keyName) {
let map = new Map();
for (const item of this) {
if (map.has(item[keyName])) {
let value = map.get(item[keyName]);
map.set(item[keyName], ++value)
} else {
map.set(item[keyName], 1)
}
}
return map;
}
sortAscByKeyName(keyName) {
this.sort((a, b) => a[keyName] - b[keyName])
}
sortDescByKeyName(keyName) {
this.sort((a, b) => b[keyName] - a[keyName])
}
minByKeyName(keyName) {
this.sortAscByKeyName(keyName);
return this[0][keyName];
}
maxByKeyName(keyName) {
this.sortDescByKeyName(keyName);
return this[0][keyName];
}
}
let arr = MyArray.of(...[
{id: 1, age: 12, name: "zs"},
{id: 2, age: 22, name: "ls"},
{id: 3, age: 12, name: "wmy"},
{id: 4, age: 6, name: "bwf"},
])
arr.push({id: 5, age: 30, name: "haha"})
console.log('groupByKeyName', arr.groupByKeyName("age"))
console.log('groupByKeyNameAndCounting', arr.groupByKeyNameAndCounting("age"))
console.log('minItemByKeyName', arr.minByKeyName("age"))
</script>
</html>