radash 常用方法汇总

40 阅读5分钟

数组方法

cluster

cluster:把一个数组尽量均匀的分成多个数组

const gods = ['Ra', 'Zeus', 'Loki', 'Vishnu', 'Icarus', 'Osiris', 'Thor', 'Apollo', 'Artemis', 'Athena']

cluster(gods, 3)
// => [
//   [ 'Ra', 'Zeus', 'Loki' ],
//   [ 'Vishnu', 'Icarus', 'Osiris' ],
//   ['Thor', 'Apollo', 'Artemis'],
//   ['Athena']
// ]

counting

counting:统计对象数组中每个唯一标识符的出现次数

const skt = [
  {
    name: 'Ra',
    culture: 'egypt'
  },
  {
    name: 'Zeus',
    culture: 'greek'
  },
  {
    name: 'Loki',
    culture: 'greek'
  }
]

counting(gods, g => g.culture) // => { egypt: 1, greek: 2 }


diff

diff:返回数组1中出现但是没在数组2中出现的项

import { diff } from 'radash'

const oldWorldGods = ['rng', 'uzi']
const newWorldGods = ['vishnu', 'uzi']

diff(oldWorldGods, newWorldGods) // => ['rng']

flat

flat:数组扁平化 —— 把包含多个数组的数组转为一个数组(注意不会递归)

import { flat } from 'radash'

const gods = [['shy', 'ning'], ['jkl']]

flat(gods) // => [shy, ning, jkl]


group

group:根据条件函数指定的key构建一个统计对象,key为指定的key有哪些value,value为对应对象

import { group } from 'radash'

const fish = [
  {
    name: 'Marlin',
    source: 'ocean'
  },
  {
    name: 'Bass',
    source: 'lake'
  },
  {
    name: 'Trout',
    source: 'lake'
  }
]

const fishBySource = group(fish, f => f.source) // => { ocean: [marlin], lake: [bass, trout] }

intersects

intersects:判断两个数组是否有公共项,返回一个布尔值

import { intersects } from 'radash'

const oceanFish = ['tuna', 'tarpon']
const lakeFish = ['bass', 'trout']

intersects(oceanFish, lakeFish) // => false

const brackishFish = ['tarpon', 'snook']

intersects(oceanFish, brackishFish) // => true

merge

merge:合并数组中符合条件的项,并且会覆盖第一个数组

import { merge } from 'radash'

const gods = [
  {
    name: 'Zeus',
    power: 92
  },
  {
    name: 'Ra',
    power: 97
  }
]

const newGods = [
  {
    name: 'Zeus',
    power: 100
  }
]

merge(gods, newGods, f => f.name) // => [{name: "Zeus" power: 100}, {name: "Ra", power: 97}]

replaceOrAppend

replaceOrAppend:替换对象数组中的项或是追加项(条件函数不满足时追加)

import { replaceOrAppend } from 'radash'

const fish = [
  {
    name: 'Marlin',
    weight: 105
  },
  {
    name: 'Salmon',
    weight: 19
  },
  {
    name: 'Trout',
    weight: 13
  }
]

const salmon = {
  name: 'Salmon',
  weight: 22
}

const sockeye = {
  name: 'Sockeye',
  weight: 8
}

replaceOrAppend(fish, salmon, f => f.name === 'Salmon') // => [marlin, salmon (weight:22), trout]
replaceOrAppend(fish, sockeye, f => f.name === 'Sockeye') // => [marlin, salmon, trout, sockeye]

unique

unique:数组去重,去除数组中重复的项;

import { unique } from 'radash'

const fish = [
  {
    name: 'Marlin',
    weight: 105,
    source: 'ocean'
  },
  {
    name: 'Salmon',
    weight: 22,
    source: 'river'
  },
  {
    name: 'Salmon',
    weight: 22,
    source: 'river'
  }
]

unique( fish, f => f.name )
// [
//     { name: 'Marlin', weight: 105, source: 'ocean' },
//     { name: 'Salmon', weight: 22, source: 'river' }
// ]

对象方法

construct:把扁平对象构建为深层对象(多维)

这个函数接受一个对象 obj 作为参数,并返回这个对象的一个新的浅拷贝

import { construct } from 'radash'
 
const flat = {
  name: 'ra',
  power: 100,
  'friend.name': 'loki',
  'friend.power': 80,
  'enemies.0.name': 'hathor',
  'enemies.0.power': 12
}
 
construct(flat)
// {
//   name: 'ra',
//   power: 100,
//   friend: {
//     name: 'loki',
//     power: 80
//   },
//   enemies: [
//     {
//       name: 'hathor',
//       power: 12
//     }
//   ]
// }

crush:把深层(多维)对象构建成扁平对象(construct的相反操作)

这个函数接受一个对象 obj 作为参数,并返回这个对象的一个新的浅拷贝

import { crush } from 'radash'
 
const ra = {
  name: 'ra',
  power: 100,
  friend: {
    name: 'loki',
    power: 80
  },
  enemies: [
    {
      name: 'hathor',
      power: 12
    }
  ]
}
 
crush(ra)
// {
//   name: 'ra',
//   power: 100,
//   'friend.name': 'loki',
//   'friend.power': 80,
//   'enemies.0.name': 'hathor',
//   'enemies.0.power': 12
// }


get

get:获取对象中的任意属性,可以通过 . 的方式获取深层的属性

import { get } from 'radash'
 
const fish = {
  name: 'Bass',
  weight: 8,
  sizes: [
    {
      maturity: 'adult',
      range: [7, 18],
      unit: 'inches'
    }
  ]
}
 
get( fish, 'sizes[0].range[1]' ) // 18
get( fish, 'sizes.0.range.1' ) // 18
get( fish, 'foo', 'default' ) // 'default'

set:在一个对象中设置一个由点或方括号表示法指定的路径上的值

用于在一个对象中设置一个值,该值位于由点或方括号表示法指定的路径上。如果路径中的任何中间对象不存在,set 函数将创建它们

import { set } from 'radash'
 
set({}, 'name', 'ra')
// => { name: 'ra' }
 
set({}, 'cards[0].value', 2)
// => { cards: [{ value: 2 }] }

omit:创建一个省略了 keys 数组中指定的一些键的新对象

创建一个新的对象,该对象是原始对象 obj 的副本,但省略了 keys 数组中指定的一些键。这个函数接受两个参数:一个对象 obj 和一个包含要省略键名的数组 keys

import { omit } from 'radash'
 
const fish = {
  name: 'Bass',
  weight: 8,
  source: 'lake',
  brackish: false
}
 
omit(fish, ['name', 'source']) // => { weight, brackish }

pick:创建一个只包含原始对象中指定的 keys`的对象

创建一个新的对象,该对象只包含原始对象 obj 中指定的 keys。这个函数接受两个参数:一个对象 obj 和一个包含要选择键名的数组 keys

import { pick } from 'radash'
 
const fish = {
  name: 'Bass',
  weight: 8,
  source: 'lake',
  barckish: false
}
 
pick(fish, ['name', 'source']) // => { name, source }

shake:过滤对象

创建一个新的对象,该对象是原始对象 obj 的副本,但省略了那些经过 filter 函数检查并返回 true 的属性。filter 函数默认会过滤掉值为 undefined 的属性

import { shake } from 'radash'
 
const ra = {
  mode: 'god',
  greek: false,
  limit: undefined
}
 
shake(ra) // => { mode, greek }
shake(ra, a => !a) // => { mode }

通用方法

防抖

import { debounce } from 'radash'

const makeSearchRequest = (event:any) => {
  console.log('searching...')
  console.log(event)
}
let mfun = debounce({ delay: 100 }, makeSearchRequest)// 延迟100ms执行

mfun('hello1')
mfun('hello2')
mfun('hello3')

// mfun.cancel()  // 取消执行

// mfun.flush('2333')// 立即执行

节流 throttle

import { throttle } from 'radash'
 
// 请求接口
const getUser = async () => {
    const { data } = await infUser()
}
 
const jieLiu = throttle({ interval: 2000 }, () => {
    // interval: 2000 间隔 2000 毫秒内只请求 1 次
    getUser ()
})


retry() - 重试失败的异步操作

用于重试失败的异步操作,直到成功或达到最大重试次数。

import { retry } from 'radash';

async function fetchData() {
  try {
    const response = await fetch('api/data');
    return response.json();
  } catch (error) {
    throw error;
  }
}

// 尝试最多 3 次,每次失败后等待 2 秒
const data = await retry({ times: 3, delay: 2000 }, fetchData);
console.log(data);


是否日期 isDate

import { isDate } from 'radash'
 
isDate(new Date()) // => true
isDate(12)         // => false
isDate('hello')    // => false

是否为空 isEmpty

import { isEmpty } from 'radash'
 
isEmpty([]) // => true
isEmpty('') // => true
isEmpty(null) // => true
isEmpty({}) // => true
isEmpty(0) // => true
isEmpty(NaN) // => true
isEmpty(undefined) // => true
 
isEmpty('hello')   // => false
isEmpty(['hello']) // => false

是否相等 isEqual

import { isEqual } from 'radash'
 
isEqual(null, null) // => true
isEqual([], [])     // => true
 
isEqual('hello', 'world') // => false
isEqual(22, 'abc')        // => false

是否函数 isFunction

import { isFunction } from 'radash'
 
isFunction('hello') // => false
isFunction(['hello']) // => false
isFunction(() => 'hello') // => true

tryit方法

tryit: 方法相当于可以帮你给异步操作加一层 try catch,有利于操作的兜底以及错误的捕获

import { tryit } from 'radash'
 
const [err,user] = await tryit(async () => {
  const { data } = await infUser()
  return data
})(userId)
 
if(err) {
  console.log('err',err)
} else {
  console.log('user',user)
}

parallel 方法

parallel 你可以理解为它是 Promise.all 的加强版,它不止能帮你做多个异步操作的并发处理,还能帮你控制并发数量

import { paraller } from 'radash'

const userIds = [1,2,3,4,5,6,7,8,9,10]
 
const users = await paraller(3,userIds,async (userId) => {
  const { data } = await infUser(userId)
  return data
})