evantianx / Bloooooooog

Place to record what I thought and learned
0 stars 0 forks source link

Algorithm #58

Open evantianx opened 6 years ago

evantianx commented 6 years ago

洗牌算法

function swap(a) {
  var b = []
  for(var i = a.length; i > 0;) {
    var random = Math.floor(Math.random() * i)
    b.push(a[random])
    // 关键的一步,将抽过的牌调换到最后
    a[random] = a[--i]
  }
}
evantianx commented 6 years ago

数组去重

function unique(arr) {
  let obj = {}
  let resultArr = []
  for(let i = 0; i < arr.length; i++) {
    let key = typeof arr[i] + json.Stringify(arr[i])
    if (!obj[key]) {
      obj[key] = true
      resultArr.push(arr[i])
    }
  }
  return resultArr
}
evantianx commented 6 years ago

psedocode ---> 伪代码

sort

Insertion sort 插入排序

evantianx commented 6 years ago

函数柯里化

const curry = (fn, ...args) => 
  fn.length <= args.length
    ? fn(...args)
    : curry.bind(null, fn, ...args)

bind()的另一个最简单的用法是使一个函数拥有预设的初始参数。这些参数(如果有的话)作为bind()的第二个参数跟在this(或其他对象)后面,之后它们会被插入到目标函数的参数列表的开始位置,传递给绑定函数的参数会跟在它们的后面。