# 耳目一新

# 模仿数组的 filter 方法

来自 jQuery v3.5.1 (L434),奇妙之处在于同时对参数 invert 和回调函数取反,不仅得到了两者的布尔值,同时保证了结果的一致性,可谓一举两得。

function grep(elems, callback, invert /* 是否对指定的条件取反 */) {
  var callbackInverse,
    matches = [],
    i = 0,
    length = elems.length,
    callbackExpect = !invert // 通过对 invert 取反得到一个布尔值

  // 仅返回通过函数校验的元素
  for (; i < length; i++) {
    callbackInverse = !callback(elems[i], i) // 对回调的结果进行取反得到一个布尔值
    if (callbackInverse !== callbackExpect) {
      matches.push(elems[i])
    }
  }

  return matches
}

# 按需添加配置

来自 react scripts (opens new window),在数组中想要根据条件增加一些项时,可以结合 [].fileter() 方法来让代码更简洁:

var addPlugin1 = true,
  addPlugin2 = false
var plugin1 = {},
  plugin2 = {}

var config = {
  plugins: [addPlugin1 && pugin1, addPlugin2 && pugin2].filter(Boolean),
}

# 求和函数

function sum(...args) {
  return eval(args.join('+')) // 此操作别开生面,但注意 eval 并不被推荐,下面是更常规的做法
  // return args.reduce((total, cur) => total + cur, 0)
}