npm install spadgerjs
<script src="js/spadger.min.js"></script>
<script>
sp.shuffle([1,2,3]) //[2,1,3]
sp.object2map({
a: 1,
b: 2
}) //Map(2) {"a" => 1, "b" => 2}
sp.parseQuery('a=1&b=2') //{a: "1", b: "2"}
sp.stringifyQuery({a:1,b:2}) //a=1&b=2
sp.objectDig({a:{b:{c:{d:4}}}},'d') //4
</script>
import sp from 'spadgerjs'
sp.shuffle([1,2,3]) //[2,1,3]
//or import some function
import { shuffle } from 'spadgerjs'
shuffle([1,2,3]) //[2,1,3]
let sp = require("spadgerjs")
sp.shuffle([1,2,3]) //[2,1,3]
感谢您的使用 | Thank you for using spadgerjs
初步打算封装一些自己造的轮子
将数组按大小分片,返回新数组
参数:
类型 | 参数名 | 描述 |
---|---|---|
Array | arr | 要分片的数组 |
Number | size | 分片大小 |
返回值:
类型 | 描述 |
---|---|
Array | 分片后的数组 |
例子:
sp.chunk([1,2,3]) //[[1],[2],[3]]
sp.chunk([1,2,3,4,5],2) //[[1,2],[3,4],[5]]
sp.chunk([1,2,3,4],5) //[[1,2,3,4]]
数组转树,必须带有id属性,并且拥有一个类似parent_id能指向父级id的键
参数:
类型 | 参数名 | 描述 |
---|---|---|
Array | items | 被转化的数组 |
String|Number | id | 父节点的id值 |
String | link | 链接父节点id的属性key |
返回值:
类型 | 描述 |
---|---|
Object | 树形对象 |
例子:
let items = [
{ id: 1, parent_id: null },
{ id: 2, parent_id: 1 },
{ id: 3, parent_id: 2 },
{ id: 4, parent_id: 1 },
]
nest(items,null,'parent_id')
数组洗牌,返回顺序随机的新数组(浅拷贝)
参数:
类型 | 参数名 | 描述 |
---|---|---|
Array | arr | 需要洗牌的数组,纯数字 |
返回值:
类型 | 描述 |
---|---|
Array | 打乱后的新数组 |
例子:
sp.shuffle([1,2,3]) //[3,2,1]
sp.shuffle([1]) //[1]
函数柯里化
参数:
类型 | 参数名 | 描述 |
---|---|---|
Function | fn | 需要被柯里化的函数 |
返回值:
类型 | 描述 |
---|---|
Function | 返回柯里化后的函数 |
例子:
let fn = (a,b,c)=>a+b+c
let curried = sp.curry(fn)
curried(1,2,3) //6
curried(1)(2)(3) //6
curried(1,2)(3) //6
防抖函数(连续触发时 保证只执行一次,过了delay时间后,才会再次触发
参数:
类型 | 参数名 | 描述 |
---|---|---|
Function | fn | 需要防抖的方法 |
Number | delay | 单位:ms,防抖间隔 |
Boolean | isPostposition | 是否后置执行(当停止操作 delay ms 后执行,如果设为 true, 则触发时立即执行,后续 delay ms 内连续触发不执行) |
返回值:
类型 | 描述 |
---|---|
Function | 被防抖后的函数 |
例子:
let debounced = sp.debounce(()=>console.log("scroll")), 500, true)
window.onScroll = debounced; //滚动停止后500ms才会执行
用于比较浮点数的大小
参数:
类型 | 参数名 | 描述 |
---|---|---|
Number | a | 浮点数A |
Number | b | 浮点数B |
返回值:
类型 | 描述 |
---|---|
Boolean | 两数是否相等 |
例子:
sp.floatCompare(0.3, 0.1+0.2) // true
缓存函数,被缓存的函数执行后会将参数对应的结果进行缓存
参数:
类型 | 参数名 | 描述 |
---|---|---|
Function | fn | 无 |
返回值:
类型 | 描述 |
---|---|
Memorized | 接受(?string|number|boolean)参数,返回任意值 |
例子:
let fib = n => n<2 ? 1 : fib(n-1) + fib(n-2)
//不做缓存直接调用会导致浏览器卡死
fib = sp.memorize(fib)
fib(1000) //7.0330367711422765e+208
用于侦测对象的数据变化(支持深度侦测,深度侦测的实现方案为延迟侦测)
参数:
类型 | 参数名 | 描述 |
---|---|---|
Object | Array | target | 要被监测的对象 |
Function | callback | 对象变化后所执行的方法 |
返回值:
类型 | 描述 |
---|---|
Proxy | 侦测后的对象(修改该对象时会触发回调函数) |
例子:
import { reactive } from 'spadgerjs'
//or let reactive = sp.reactive
let obj = {
num:1,
arr:[],
o:{ n:1 }
}
let observed = reactive(obj,()=>{
console.log(obj.num)
console.log(obj.arr)
console.log(obj.o)
})
observed.num = 100
observed.arr.push(1,2,3)
observed.o.n = 1000
//logs:
//100
//[1,2,3]
//{n:100}
节流函数(连续触发时第一次立即触发,之后每 delay ms 执行一次)
参数:
类型 | 参数名 | 描述 |
---|---|---|
Function | fn | 需要节流的方法 |
Number | delay | 单位:ms,每次执行函数的间隔 |
返回值:
类型 | 描述 |
---|---|
Function | 被节流后的函数 |
例子:
let count = {n:0}
let thottled = sp.throttle(count=> ++count.n,500)
setTimeout(()=>{
for(let i = 0; i < 10 ; i++){
thottled(count)
}
console.log(count.n)//1
},1000)
深拷贝
参数:
类型 | 参数名 | 描述 |
---|---|---|
object | obj | 需要拷贝的对象 |
返回值:
类型 | 描述 |
---|---|
object | 深拷贝过后的对象 |
例子:
a = { a:"A",b:[1,2,3,4,5] };
a.c = a;
copy = sp.deepClone(a);
copy === a //false
copy.a === a.a //true
copy.b === a.b //false
比较两个对象是否值相等,深度为1
参数:
类型 | 参数名 | 描述 |
---|---|---|
any | o1 | 对象1 |
any | o2 | 对象2 |
返回值:
类型 | 描述 |
---|---|
Boolean | 判断结果 |
例子:
sp.isEqual(1,1) //true
sp.isEqual({a:1},{a:1}) //true
sp.isEqual('a','bc') //false
对象转map
参数:
类型 | 参数名 | 描述 |
---|---|---|
无 | obj | obj 需要转换成map的对象 |
返回值:
类型 | 描述 |
---|---|
Map | 转换后的Map |
例子:
sp.object2map({
a: 1,
b: 2
}) //Map(2) {"a" => 1, "b" => 2}
从对象中找到特定key的值
参数:
类型 | 参数名 | 描述 |
---|---|---|
Object | obj | 无 |
string | target | 无 |
返回值:
类型 | 描述 |
---|---|
* | 无 |
例子:
sp.objectDig({a:{b:{c:{d:4}}}},'d') //4
将链接search转换为对象,可以用原生api: URLSearchParams
参数:
类型 | 参数名 | 描述 |
---|---|---|
String | str | search字符串,不包含? |
返回值:
类型 | 描述 |
---|---|
Object | 参数对象 |
例子:
sp.parseQuery('a=1&b=2') //{a: "1", b: "2"}
将对象转换成search字符串(不带问号)
参数:
类型 | 参数名 | 描述 |
---|---|---|
Object | obj | 要被转换成search字符串的对象 |
返回值:
类型 | 描述 |
---|---|
String | 字符串 |
例子:
sp.stringifyQuery({a:1,b:2}) //a=1&b=2
1. commit
提交规范,请使用npm run commit
进行提交
参数如下:
无