k8w.io
k8w-extend-native 介绍
2018-10-20作者:k8w

介绍

k8w-extend-native 是一个原生JS的扩展库,封装了开发中常用的一些方法,主要包含了对数据、对象、日期的操作等。
https://github.com/k8w/k8w-extend-native

引入方法

从npm下载该库:

npm i k8w-extend-native

在代码入口点引入一次即可:

import 'k8w-extend-native'

本库事实上包含了若干子库,包括:

  • k8w-linq-array 常用的数组操作
  • k8w-super-date 常用的日期操作
  • k8w-super-object 常用的对象操作
    以下仅罗列一些最常用且重要的方法,如果你感兴趣,可以自行进入node_modules,查阅index.d.ts,有完整的方法定义。

k8w-linq-array

(相当于 C# LINQ 的 TS版本)

查找类场景

  • 查找一个:find / findIndex / findLast / findLastIndex
  • 查找一堆:filter / filterIndex
  • first / last
let arr = [
  {value: 0},
  {value: 1},
  {value: 2},
  ...
  {value: 10}
]

// 查找一个arr.find(v => v % 4 == 1);  // { value: 1 }
arr.findIndex(v => v % 4 == 1);  // 1
arr.findLast(v => v % 4 == 1);  // { value: 9 }
arr.findLastIndex(v => v % 4 ==1);  // 9

// 查找一堆
arr.filter(v => v % 4 == 1);  // [{value: 1}, {value: 5}, {value: 9}]
arr.filterIndex(v => v % 4 == 1); // []1, 5, 9]

arr.first();  // {value: 0}
arr.last();  // {value: 10}

排序类场景

  • orderBy / orderByDesc 支持多字段排序哟
  • distinct
// 按Value1正序(从小到大), 如果Value1相同,则按Value2排序
arr.orderBy(v => v.value1, v=>v.value2);  
// 按Value1、Value2倒序
arr.orderByDesc(v => v.value1, v => v.value2)

// 去除数组中重复的项
arr.distinct();

统计类场景

  • count
  • 统计计算:min / max / sum / average
  • 分组统计:groupBy
arr.count(v => v.value > 5);
arr.min(v=>v.value);
arr.max(v=>v.value);
arr.sum(v=>v.value);
arr.average(v=>v.value);

arr = [
  {name: 'A', value: 1},
  {name: 'B', value: 2},
  {name: 'A', value: 3}
]
arr.groupBy(v=>v.A);  // [
  [1, 3],  //key==A
  [2]  //key==B
]

arr.groupBy(v=>v.A).map(v=>({
  name: v.key,
  sum: v.sum()
}))  // [{name: 'A', sum: 3}, {name: 'B', sum: 2}]

性能类场景

  • binarySearch 二分查找(同find)
  • binaryInsert (二分插入)
  • binaryDistinct (二分去重,同distinct)

其它

  • remove / removeOne (从左往右,删除数组中的项,同find)

k8w-super-date

  • new Date().format('yyyy-MM-dd hh:mm:ss SSS') 日期格式化
  • Date.today() 获取“今天”的时间戳(本地时区)

k8w-super-object

  • Object.merge 同 Object.assign 但是是深拷贝
  • 其它不是太常用 不赘述

练手问题

QuizRound数组,查询玩的天数最多的人

interface QuizRound {
  startTime: number;  // 玩的时间
  name: string;  // 姓名
}

let rounds: QuizRound[] = [
  {
    "startTime": 1525140000000,
    "name": "MC"
  },
  {
    "startTime": 1525147200000,
    "name": "MC"
  },
  {
    "startTime": 1525237200000,
    "name": "MC"
  },
  {
    "startTime": 1525240800000,
    "name": "MC"
  },
  {
    "startTime": 1525140000000,
    "name": "帅"
  },
  {
    "startTime": 1525147200000,
    "name": "帅"
  },
  {
    "startTime": 1525312800000,
    "name": "帅"
  },
  {
    "startTime": 1525226400000,
    "name": "凯"
  },
  {
    "startTime": 1525312800000,
    "name": "凯"
  },
  {
    "startTime": 1525399200000,
    "name": "凯"
  },
  {
    "startTime": 1525312800000,
    "name": "晨"
  },
  {
    "startTime": 1525399200000,
    "name": "晨"
  }
];
(正文完)
留言(1条)
wocao 说:
666
2019-05-08 21:27 | 1楼 | 回复
发表新留言
您的大名:
必填
电子邮箱:
不公开,仅用于向你发送回复